正在删除txt文件中的特定列表



我正在尝试从文本文件中删除特定列表,并在不使用os.replace的情况下覆盖原始文本文件。但是,我尝试使用truncate,但我的txt文件没有发生任何问题。。

输入:

def delete_tenants():
a = []
tnf = False
# while not found:
with open("tenant_application.txt", "r") as file:
lines = file.readlines()
with open("tenant_application.txt", "r") as file:
for line in file:
a = line.split(",")  # split lines using comma
print(a)  # display all the data in txt file
with open("tenant_application.txt", "r") as file:
delete = input("Enter the primary key to delete: ")
for line in file:
a = line.split(",")  # split lines using comma
b = a[10].strip()
c = delete.strip()
d = c == b
if d:
print("Line that you want to delete:", line)
tnf = True
break
if tnf == False:
print("nInvalid Inputn")
return delete_tenants()
if tnf == True:
input1 = "tenant_application.txt"
#
with open(input1, "r+") as file1:
lines = file1.readlines()
file1.seek(0)
for i in lines:
if i not in a:
file1.write(i)
file1.truncate()

我的文本文件:

Celine ,43,Female,Selangor,Kuala Lumpur,Happy Garden,Persiaran Sungai Long 2 ,2003-04-03 00:00:00,43000,111,0001
Jackson ,43,Female,Selangor,Kuala Lumpur,Happy Garden,Persiaran Sungai Long 2 ,2003-04-03 00:00:00,43000,111,0002
Wong ,43,Female,Selangor,Kuala Lumpur,Happy Garden,Persiaran Sungai Long 2 ,2003-04-03 00:00:00,43000,111,0003
Liew ,43,Female,Selangor,Kuala Lumpur,Happy Garden,Persiaran Sungai Long 2 ,2003-04-03 00:00:00,43000,111,0004

这是一个CSV文件。Python可以通过[CSV模块]读取和解析CSV文件,但更好的选择是使用Pandas读取文件,删除所需行,然后将其保存回。这只需几行即可完成。

您可以使用pandas.read_CSV函数将CSV读取到DataFrame(大致是内存中的表(中:

import pandas as pd
df=pd.read_csv(path,header=None)

如果文件有一个标头,则数据帧的列将使用标头名称。否则,列名将为数字。

给出问题的示例

import pandas as pd
from io import StringIO
csv="""Celine ,43,Female,Selangor,Kuala Lumpur,Happy Garden,Persiaran Sungai Long 2 ,2003-04-03 00:00:00,43000,111,0001
Jackson ,43,Female,Selangor,Kuala Lumpur,Happy Garden,Persiaran Sungai Long 2 ,2003-04-03 00:00:00,43000,111,0002
Wong ,43,Female,Selangor,Kuala Lumpur,Happy Garden,Persiaran Sungai Long 2 ,2003-04-03 00:00:00,43000,111,0003
Liew ,43,Female,Selangor,Kuala Lumpur,Happy Garden,Persiaran Sungai Long 2 ,2003-04-03 00:00:00,43000,111,0004"""
df=pd.read_csv(StringIO(csv),header=None)

可以使用df[0]:检索第一列值

df[0]
----------------
0     Celine
1    Jackson
2       Wong
3       Liew

我们可以过滤它们以排除不符合条件的行,而不是根据某些条件删除行:

df=df[df[10]!=4]
df[0]
---------------
0     Celine
1    Jackson
2       Wong

一旦我们有了想要的数据帧,我们就可以用to_csv:保存它

df.to_csv(path,header=False,index=false)

可以操作字符串列来去除它们的空白:

df[0]=df[0].str.strip()

这个SO问题的答案显示了剥离所有字符串列的各种方法,例如:

df=df.applymap(lambda x: x.strip() if isinstance(x, str) else x)

把所有这些放在一起:

import pandas as pd
df=pd.read_csv(path,header=None)
id= input("Enter the primary key to delete: ")
df=df[df[10]!=id]
df=df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
df.to_csv(path,header=False,index=false)

最新更新