我正在尝试从文件中读取一个数字,将其转换为int,向其中添加一个数字,然后将新数字重写回文件。但是,每当我打开.txt文件时运行此代码,它都是空白的。任何帮助将不胜感激!我是一个python newb。
f=open('commentcount.txt','r')
counts = f.readline()
f.close
counts1 = int(counts)
counts1 = counts1 + 1
print(counts1)
f2 = open('commentcount.txt','w') <---(the file overwriting seems to happen here?)
f2.write(str(counts1))
答案 0 :(得分:5)
此问题是由于您未能关闭文件描述符引起的。您有f.close
但它应该是f.close()
(函数调用)。最后你还需要一个f2.close()
。
如果没有close
,则缓冲区的内容到达文件需要一段时间。一旦不使用文件描述符,最好立即关闭文件描述符。
作为旁注,您可以使用以下语法糖来确保文件描述符尽快关闭:
with open(file, mode) as f:
do_something_with(f)
现在,关于覆盖部分:
简短回答:您没有以正确的模式打开文件。使用追加模式("a"
)。
答案很长:
这是预期的行为。阅读以下内容:
>>> help(open)
Help on built-in function open in module __builtin__:
open(...)
open(name[, mode[, buffering]]) -> file object
Open a file using the file() type, returns a file object. This is the
preferred way to open a file. See file.__doc__ for further information.
>>> print file.__doc__
file(name[, mode[, buffering]]) -> file object
Open a file. The mode can be 'r', 'w' or 'a' for reading (default),
writing or appending. The file will be created if it doesn't exist
when opened for writing or appending; it will be truncated when
opened for writing. Add a 'b' to the mode for binary files.
Add a '+' to the mode to allow simultaneous reading and writing.
If the buffering argument is given, 0 means unbuffered, 1 means line
buffered, and larger numbers specify the buffer size. The preferred way
to open a file is with the builtin open() function.
Add a 'U' to mode to open the file for input with universal newline
support. Any line ending in the input file will be seen as a '\n'
in Python. Also, a file so opened gains the attribute 'newlines';
the value for this attribute is one of None (no newline read yet),
'\r', '\n', '\r\n' or a tuple containing all the newline types seen.
因此,阅读手册会显示,如果您希望保留内容,则应以附加模式打开:
open(file, "a")
答案 1 :(得分:2)
你应该使用with语句。这假设文件描述符无论如何都被关闭:
with open('file', 'r') as fd:
value = int(fd.read())
with open('file', 'w') as fd:
fd.write(value + 1)
答案 2 :(得分:0)
python打开文件参数:
w
:
打开文件仅供写入。如果文件存在,则覆盖文件。 如果该文件不存在,则创建一个用于写入的新文件。
您可以使用a
(追加):
打开要追加的文件。文件指针位于文件的末尾 如果文件存在。也就是说,文件处于追加模式。如果 文件不存在,它会创建一个新文件进行编写。
有关详情,请阅读here
还有一个建议是使用:
with open("x.txt","a") as f:
data = f.read()
............
例如:
with open('c:\commentcount.txt','r') as fp:
counts = fp.readline()
counts = str(int(counts) + 1)
with open('c:\commentcount.txt','w') as fp:
fp.write(counts)
请注意,仅当您的文件名为commentcount
并且第一行有int
时才会有效,因为r
没有创建新文件,也只有一个反...它不会附加新号码。
答案 3 :(得分:0)
您永远不会关闭该文件。如果未正确关闭文件,操作系统可能不会提交任何更改。为避免此问题,建议您使用Python的with
语句打开文件,因为它会在您完成文件后为您关闭文件。
with open('my_file.txt', a) as f:
do_stuff()