我正在尝试使用 For 循环在 .TXT 文件中写入数字 1 - 4096,但是当循环完成时,.TXT 文件中只有数字 4096

Posted

技术标签:

【中文标题】我正在尝试使用 For 循环在 .TXT 文件中写入数字 1 - 4096,但是当循环完成时,.TXT 文件中只有数字 4096【英文标题】:I am trying to write numbers 1 - 4096 in a .TXT file using a For Loop, but when the loop is finished, there is only the number 4096 in the .TXT file 【发布时间】:2021-10-08 03:12:51 【问题描述】:

我有 2 个文件:

text.txt

还有:

main.py

main.py,我有以下代码:

for i in range(1,4097):
    i = str(i)
    file = open("text.txt","w")
    file.write(i)

如您所见,我想生成从 1 到 4096 的所有数字,但是当我运行脚本时,它只在 text.txt 中写入 4096

如何在text.txt 中写入数字 1 - 4096?

(顺便说一句,我将i 设为字符串(str()),因为我无法在文本文件中写入int()i)。

谢谢

丹尼尔

【问题讨论】:

【参考方案1】:

您应该在进入 for 循环之前进行 open 调用。否则每次都会覆盖文件。

【讨论】:

非常感谢。这行得通。但是你知道如何在换行符上写下每个新数字吗?因为现在它只是写“123456789.....4096”我希望它写成1\n2\n3\n4.....4095\n4096 我不确定它是否有效,但您可以尝试在每个字符串中添加“\n”。 @Daniel 尝试在写入时添加换行符:file.write(i + '\n') 真的就用print(i, file=file)吧。它添加了换行符,您可以省略 i = str(i)【参考方案2】:

您希望在整个循环期间打开文件描述符:

with open('text.txt', 'w') as op:
   for i in range(0,10):
       op.write(f'i\n')

同时使用 f 字符串可以避免将 i 转换为字符串。

【讨论】:

@fsimonjetz 这很有趣!像 op.write(print(i)) 这样的东西可以解决问题吗? op.write(f'i\n') 行替换为print(i, file=op)。它既添加了换行符又进行了字符串转换。 顺便说一句,为with...as +1,就是这样! :)【参考方案3】:

我解决这个问题的方法是这样做:

file = open("text.txt","a")
for i in range(1,4097):
    i = str(i)
    file.write(str(i) + "\n")

file.close()

而不是这个:

for i in range(1,4097):
    i = str(i)
    file = open("text.txt","w")
    file.write(i)

如您所见,它不起作用的原因是当open("text.txt","w") 运行时,它每次都覆盖text.txt,因为open("text.txt") 设置为write 模式(w)而不是append 模式(@ 987654329@)。所以每次运行时,它都会覆盖每个数字。此外,如果我想在每次运行时都换行,我需要做的就是将 file.write(str(i)) 替换为:file.write(str(i) + "\n")

【讨论】:

【参考方案4】:

这是由file=open(‘test.txt’,‘w+’) 中的“w+”引起的。 如果您将“w+”替换为“a+”,它应该可以工作。 这是因为w+ 覆盖了文件,所以数字被写入,但立即被下一个数字替换,导致只剩下最后一个数字。 a+ 附加到文件中,因此您将在 test.txt 中获得从 1 到 4096 的所有数字。 作为旁注,您忘记关闭文件,这可能会导致以后出现问题。 这就是您最好编写代码的方式:

for i in range(1,4097):
    with open("text.txt", "a+") as file:
        file.write(f"\ni")

这更好,因为它会在 with 块中的任何内容运行后自动关闭文件。您也可以在末尾写file.close() 而不是这样做,但这需要多行代码。 f'\ni 确保在打印下一个数字之前有一个新行。

【讨论】:

对,我明白了。修正了引号。

以上是关于我正在尝试使用 For 循环在 .TXT 文件中写入数字 1 - 4096,但是当循环完成时,.TXT 文件中只有数字 4096的主要内容,如果未能解决你的问题,请参考以下文章

将for循环的输出写入多个文件

awk 脚本和 for 循环

Windows - for 循环中的 findstr(文件内容)

在一维数组中写维吉尼广场

试图从现有的 for 循环中读取文件

带有多个命令的for循环[重复]