【发布时间】:2018-10-30 07:26:52
【问题描述】:
我有一个文件,其内容如下,
to-56 Olive 850.00 10 10
to-78 Sauce 950.00 25 20
to-65 Green 100.00 6 10
如果第 4 列数据小于或等于第 5 列,则应将数据写入第二个文件。
我尝试了以下代码,但第二个文件中只保存了“to-56 Olive”。我无法弄清楚我在这里做错了什么。
file1=open("inventory.txt","r")
file2=open("purchasing.txt","w")
data=file1.readline()
for line in file1:
items=data.strip()
item=items.split()
qty=int(item[3])
reorder=int(item[4])
if qty<=reorder:
file2.write(item[0]+"\t"+item[1]+"\n")
file1.close()
file2.close()
【问题讨论】:
-
您正在使用
data.strip()而不是line.strip()。还要摆脱data=file1.readline(),因为它正在消耗第一行但没有做任何事情 -
而且您实际上并不需要
.strip(),因为.split()删除了所有空格。 -
@Upeka Fernando 您可以使用 append 方法在“purchasing.txt”中写入项目,因为 write 可以覆盖它。您可以将 file2=open("purchasing.txt","w") 更改为 file2=open("purchasing.txt","a") 然后我认为您解决了问题。
-
IME,我无法获得强大的“a”模式,因此将文件读入内存,然后将处理后的数据写入“w”模式文件。
-
@ShivamKumar 正常的“w”模式在这里很好。仅当您想将新数据附加到现有文件时才需要“a”模式。我有时会看到代码在“a”模式下在循环中重复打开文件,写入一行,然后在每次循环迭代时关闭文件。这是非常低效的,并且只有当数据必须在系统经常处于崩溃危险的脆弱环境中写入时才应该这样做。即便如此,您仍然冒着数据损坏的风险......
标签: python file-handling