打开/写入删除txt文件内容?

时间:2014-01-12 17:07:21

标签: python python-3.x

我正在尝试从文件中读取一个数字,将其转换为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))

4 个答案:

答案 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()