此readlines ()
函数似乎无法正常工作,for
迭代也不起作用。此外,当我尝试使用file.write ()
写入文件时,它无法正常工作。有谁知道这是为什么?
crop = input("Which crop? ")
quantity = input("How many? ")
file = ('cropdatabase.txt', 'a+')
def appendA ():
lines = file.readlines()
print (lines)
for line in lines:
print ('1')
if crop in line:
print (crop)
row = str(a)
split_2 = a.split (',')
split_2.append (quantity)
def appendB ():
print ('3')
file.write ('\n')
file.write (crop + ' ')
file.write (quantity + ' ')
with open('cropdatabase.txt', 'a+') as file:
if crop in open('cropdatabase.txt').read():
appendA ()
else:
appendB ()
file.close ()
答案 0 :(得分:0)
您没有打开该文件。您需要使用open(filename, mode).readlines()
您正在使用上下文管理器并调用file
变量。但是,您实际上并没有将file
从上下文管理器传递给该函数。您也应该在file
语句中将其命名为with ...
以外的其他名称,因为该文件是内置的关键字。
答案 1 :(得分:0)
请勿使用名为file
的变量。在python 2中,这(或多或少)与open
相同。
其次,不要使用全局变量,作为参数传递。
第三,将所有不在函数内部的代码放在一起。
a+
没有按你的想法行事。当您读取文件位置已经在文件结尾时,您将不会阅读任何内容。最简单的是两次读取文件。您可以使用seek()
来操纵文件位置,但我怀疑它是否值得。
我应该补充说,附加到同一个数据文件是非常不寻常的。
appendA
功能存在问题,我真的不知道你想在这里实现什么。
我意识到我可能有错误的流程,因为如果整个文件中没有裁剪,你只想附加B.为此,我们将使用字典来存储裁剪名称 - 这比每次读取整个文件要快得多。我不能把那些代码放进去因为a)我不确定那是你想要的,而b)我不知道输入文件的格式是什么。
让我们尝试解决这个问题:
def appendA(fo, crop, quantity, line):
print('1')
if crop in line:
print(crop)
#row = str(a) <<<< What is a?
split_2 = line.split(',')
split_2.append(quantity)
# Now what ??
def appendB(fo, crop, quantity):
print('3')
fo.write('\n')
fo.write(crop + ' ')
fo.write(quantity + ' ')
crop = input("Which crop? ")
quantity = input("How many? ")
filename = 'cropdatabase.txt'
# First read the file
with open(filename) as fo:
lines = fo.readlines()
# Now open for append
with open(filename, 'a') as fo:
for line in lines:
print(line)
if crop in line:
appendA(fo, crop, quantity, line)
else:
appendB(fo, crop, quantity)
说实话,我不确定我是否理解最终结果应该是什么,但试试这个,如果我做出了错误的假设,请告诉我。