我正在尝试使用 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的主要内容,如果未能解决你的问题,请参考以下文章