📜  如何从Python中的泡菜文件中删除?

📅  最后修改于: 2022-05-13 01:55:29.376000             🧑  作者: Mango

如何从Python中的泡菜文件中删除?

Python pickle 模块用于序列化和反序列化Python对象结构。 Python中的任何对象都可以进行pickle,以便将其保存在磁盘上。 pickle 的作用是先“序列化”对象,然后再将其写入文件。 Pickling 是一种将Python对象(列表、字典等)转换为字符流的方法。这个想法是这个字符流包含在另一个Python脚本中重建对象所需的所有信息

Pickle 一次序列化一个对象,读回一个对象——pickle 的数据按顺序记录在文件中。如果您只是执行pickle.load,您将读取序列化到文件中的第一个对象(而不是您编写的最后一个)。在对第一个对象进行反序列化后,文件指针位于下一个对象的开头——如果你再次调用 pickle.load,它将读取下一个对象——直到文件结束。

使用的功能:

  • dump() – 用于将 obj 的pickle 表示写入打开的文件对象文件。

句法:

  • load() – 用于从打开的文件对象文件中读取腌制对象表示,并返回指定的重组对象层次结构。

句法:

  • seek(0)- Pickle 记录可以连接到一个文件中,所以是的,您可以多次 pickle.load(f),但文件本身并没有以可以让您搜索给定记录的方式编入索引。您的 f.seek(0) 正在做的是寻找文件中的第三个字节,该字节位于 pickle 记录的中间,因此是不可选择的。如果您需要随机访问,您可能需要查看内置的 shelve 模块,该模块使用数据库文件模块在 pickle 之上构建了一个类似字典的界面。
  • truncate() -改变文件大小

要从 pickle 文件中删除内容,我们首先需要向其添加内容,下面给出了一种执行相同操作的方法及其实现:

方法

  • 导入模块
  • 以写模式打开文件
  • 输入数据
  • 将数据转储到文件
  • 继续直到选择是
  • 关闭文件

程序:

Python3
import pickle
 
def write_file():
 
    f = open("travel.txt", "wb")
    op = 'y'
 
    while op == 'y':
 
        Travelcode = int(input("enter the travel id"))
        Place = input("Enter the Place")
        Travellers = int(input("Enter the number of travellers"))
        buses = int(input("Enter the number of buses"))
 
        pickle.dump([Travelcode, Place, Travellers, buses], f)
 
        op = input("Dp you want to continue> (y or n)")
 
    f.close()
 
 
print("entering the details of passengers in the pickle file")
write_file()


Python3
import pickle
 
 
def delete_details():
   
    f1 = open("travel.txt", 'rb+')
    travelList = []
    t_place = input("Enter the place to delete :")
 
    while True:
        try:
            L = pickle.load(f1)
            if(L[1] != t_place):
                travelList.append(L)
        except EOFError:
            print("completed deleting details")
            break
 
    f1.seek(0)
    f1.truncate()
 
    for i in range(len(travelList)):
        pickle.dump(travelList[i], f1)
    else:
        f1.close()
 
# reading content in the file.
def read_file():
 
    f = open("travel.txt", 'rb')
    while True:
        try:
            L = pickle.load(f)
            print("Place", L[1], "\t\t Travellers :",
                  L[2], "\t\t Buses :", L[3])
 
        except EOFError:
            print("Completed reading details")
            break
    f.close()
 
 
print("deleting the desired column")
delete_details()
 
print("Reading the file")
read_file()


现在,由于我们已将数据输入到文件中,因此下面给出了从中删除数据的方法以及基于它的实现:

方法

  • 导入模块
  • 打开文件
  • 输入有关要删除的数据的一些信息
  • 删除适当的数据
  • 关闭文件

程序:

蟒蛇3

import pickle
 
 
def delete_details():
   
    f1 = open("travel.txt", 'rb+')
    travelList = []
    t_place = input("Enter the place to delete :")
 
    while True:
        try:
            L = pickle.load(f1)
            if(L[1] != t_place):
                travelList.append(L)
        except EOFError:
            print("completed deleting details")
            break
 
    f1.seek(0)
    f1.truncate()
 
    for i in range(len(travelList)):
        pickle.dump(travelList[i], f1)
    else:
        f1.close()
 
# reading content in the file.
def read_file():
 
    f = open("travel.txt", 'rb')
    while True:
        try:
            L = pickle.load(f)
            print("Place", L[1], "\t\t Travellers :",
                  L[2], "\t\t Buses :", L[3])
 
        except EOFError:
            print("Completed reading details")
            break
    f.close()
 
 
print("deleting the desired column")
delete_details()
 
print("Reading the file")
read_file()

输出: