【问题标题】:Write to a file with for loop使用 for 循环写入文件
【发布时间】:2019-12-12 20:18:23
【问题描述】:

我有一个 for 循环,它通过一个 Dataframe 并打印一些行,可能是 2 或 3 行。我编写了一个代码,但它只将最后一行写入文本文件。 这是我的代码:

data = read_csv()
#how to change this line
data = data.set_index('Seat No')
print('Here is your ticket...')
x=read_file()
for seat_no in x:
    row=data.loc[int(seat_no)]
    ticket = open('ticket.txt', 'w')
    old_stdout = sys.stdout
    sys.stdout = ticket
    ticket.writelines('''
        {}-{} {}
         {}
        '''.format(row.Source, '%4s' % row.Destination, '%2s' % row.Departure, '%2s' % seat_no))
    sys.stdout = old_stdout
    ticket.close()
    printed_ticket = open('ticket.txt').read()
    print(printed_ticket)

【问题讨论】:

  • old_stdout = sys.stdout; sys.stdout = ticket 这件事有什么意义???您不需要它来写入文件。

标签: python dataframe text-files


【解决方案1】:

我没有足够的声誉发表评论,但我认为如果您将模式从 'w' 更改为 'a',它将在通过数据框时附加。

您正在迭代您的数据帧并每次都写入,因此它将覆盖现有数据。

【讨论】:

  • 谢谢,但我想在文件中添加新行并在每次运行程序时删除。如果我使用附加信息将在文件中。
  • stackoverflow.com/questions/4914277/… 您可以尝试添加此行 open(file, 'w').close ,这将使文件为空,然后在下面的行中再次打开它,就像您在 'a' 中所做的那样,没有关闭。我不确定它在内存或任何东西上的效率如何,但如果你只需要一种手段来达到目的,那么值得一试。我不确定我是否误解了你。
  • @noscodemos 在一个循环中一遍又一遍地打开同一个文件——即使是为了追加——无论如何都是一个非常糟糕的主意。打开文件是一项非常昂贵的操作,因此如果可以的话,您只想执行一次。 IOW,这里正确的解决方案是在循环之前只打开一次文件。
【解决方案2】:

调用open('ticket.txt', 'w') 会导致文件被覆盖,因此如果要追加,请改用'a'。

另外,close 应该由 with open... 自动化,如下所示:

with open('ticket.txt', 'a') as ticket:
    for seat_no in x:
        ticket.writelines('''...

最后两行(打开文件以再次读取时)看起来您可能想将它们移出循环。

【讨论】:

  • 非常感谢您的帮助,当我在 for 循环之前打开文件时它确实有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2018-03-14
  • 2018-01-19
  • 2018-01-12
  • 1970-01-01
  • 2011-10-25
  • 2021-11-14
相关资源
最近更新 更多