阅读后,Python无法从文本文件中读取行

时间:2015-11-17 10:41:55

标签: python file text

我有一个问题,我试图首先检查一个文本文件是否存在已知的字符串,并在此基础上循环该文件并插入另一行。

由于某种原因,在调用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()    

1 个答案:

答案 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():
        # ....
    
  • 重新打开文件。以读取模式打开文件会将当前文件位置置于开头。