我有一个问题,我试图首先检查一个文本文件是否存在已知的字符串,并在此基础上循环该文件并插入另一行。
由于某种原因,在调用file.read()来检查测试字符串之后,for循环似乎不起作用。我试过调用file.seek(0)来回到文件的开头,但这没有用。
我目前的代码如下:
try:
f_old = open(text_file)
f_new = open(text_file + '.new','w')
except:
print 'Unable to open text file!'
logger.info('Unable to open text file, exiting')
sys.exit()
wroteOut = False
# first check if file contains an test string
if '<dir>' in f_old.read():
#f_old.seek(0) # <-- do we need to do this??
for line in f_old: # loop thru file
print line
if '<test string>' in line:
line = ' <found the test string!>'
if '<test string2>' in line:
line = ' <found test string2!>'
f_new.write(line) # write out the line
wroteOut = True # set flag so we know it worked
f_new.close()
f_old.close()
答案 0 :(得分:4)
你已经知道了答案:
#f_old.seek(0) # <-- do we need to do this??
是的,您需要先寻找文件的开头,然后才能再次阅读内容。
所有文件操作都适用于当前文件位置。使用file.read()
读取所有文件,将当前位置设置为文件末尾。如果要从文件开头重新读取数据,则需要file.seek(0)
调用。替代方案是:
不再读取文件,只读取所有数据,因此请改用该信息。文件操作很慢,使用内存中的相同数据要快得多:
contents = f_old.read()
if '<dir>' in contents:
for line in contents.splitlines():
# ....
重新打开文件。以读取模式打开文件会将当前文件位置置于开头。