首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python文件操作

Python文件操作
EN

Stack Overflow用户
提问于 2012-06-24 18:34:28
回答 2查看 13.7K关注 0票数 15

我在这个python程序中得到了一个错误"IOError: Errno 0 Error“:

代码语言:javascript
复制
from sys import argv
file = open("test.txt", "a+")
print file.tell() # not at the EOF place, why?
print file.read() # 1
file.write("Some stuff will be written to this file.") # 2
# there r some errs when both 1 & 2
print file.tell()
file.close()

什么地方出问题了?以下两种情况都是可以的:

代码语言:javascript
复制
from sys import argv
file = open("test.txt", "a+")
print file.tell() # not at the EOF place, why?
# print file.read() # 1
file.write("Some stuff will be written to this file.") # 2
# there r some errs when both 1 & 2
print file.tell()
file.close()

和:

代码语言:javascript
复制
from sys import argv
file = open("test.txt", "a+")
print file.tell() # not at the EOF place, why?
print file.read() # 1
# file.write("Some stuff will be written to this file.") # 2
# there r some errs when both 1 & 2
print file.tell()
file.close()

但是,为什么?

代码语言:javascript
复制
print file.tell() # not at the EOF place, why?

不打印文件的大小,"a+“是追加模式吗?那么文件指针应该指向EOF?

我使用的是Windows7和Python2.7。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-24 18:42:13

Python使用stdio的fopen函数并将模式作为参数传递。我假设你使用的是windows,因为@Lev说代码在Linux上运行得很好。

下面是windows的fopen文档,这可能是解决问题的线索:

如果指定了"r+“、"w+”或"a+“访问类型,则同时允许读取和写入(文件被称为打开以进行”更新“)。但是,当您在读取和写入之间切换时,必须有一个中间的fflush、fsetpos、fseek或倒带操作。如果需要,可以为fsetpos或fseek操作指定当前位置。

因此,解决方案是在file.write()调用之前添加file.seek()。要附加到文件的末尾,请使用file.seek(0, 2)

作为参考,file.seek的工作原理如下:

偏移量要更改文件对象的位置,请使用f.seek(

,from_what)。位置是通过将偏移量添加到参考点来计算的;参考点是通过from_what参数选择的。值为0的from_what从文件开头开始测量,值1使用当前文件位置,值2使用文件结尾作为参考点。from_what可以省略,默认为0,使用文件的开头作为参考点。

reference: [http://docs.python.org/tutorial/inputoutput.html]

正如@lvc在评论中和@Burkhan在他的回答中提到的那样,您可以使用io module中更新的打开函数。但是,我想指出的是,write函数在本例中的工作方式并不完全相同--您需要提供unicode字符串作为输入,在本例中只需在字符串前添加一个u即可

代码语言:javascript
复制
from io import open
fil = open('text.txt', 'a+')
fil.write('abc') # This fails
fil.write(u'abc') # This works

最后,请避免使用名称'file‘作为变量名,因为它引用了内置类型,并且将被静默覆盖,从而导致一些难以发现的错误。

票数 13
EN

Stack Overflow用户

发布于 2012-06-24 19:41:00

解决方案是使用io中的open

代码语言:javascript
复制
D:\>python
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('file.txt','a+')
>>> f.tell()
0L
>>> f.close()
>>> from io import open
>>> f = open('file.txt','a+')
>>> f.tell()
22L
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11176724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档