配资网站建设,昆明app制作,珠海市城市建设档案馆网站,电商网站设计是干什么的每个打开的文件都有一个隐式指针#xff0c;该指针指示将在何处读取和写入数据。通常#xff0c;它默认为文件的开头#xff0c;但是如果您使用a#xff08;追加#xff09;模式#xff0c;则默认为文件的结尾。还值得注意的是#xff0c;w即使您添加到该模式#xff0…每个打开的文件都有一个隐式指针该指针指示将在何处读取和写入数据。通常它默认为文件的开头但是如果您使用a追加模式则默认为文件的结尾。还值得注意的是w即使您添加到该模式该模式也会截断您的文件即删除所有内容。
每当您读取或写入N个字符时读/写指针都会在文件中向前移动该数量。我发现如果您记得那些可以将其像旧的盒式磁带一样思考。因此如果执行以下代码
fd open(testfile.txt, w)
fd.write(This is a test file.\n)
fd.close()
fd open(testfile.txt, r)
print fd.read(4)
fd.write( IS)
fd.close()
...它应该最终打印This然后将文件内容保留为This IS a test file.。这是因为首字母read(4)返回文件的前4个字符因为指针位于文件的开头。它将指针留在紧随其后的空格字符处This因此以下代码write( IS)用空格与已有的空格相同覆盖接下来的三个字符然后IS替换现有的is。
您可以使用seek()文件的方法跳到特定点。在上面的示例之后如果执行以下操作
fd open(testfile.txt, r)
fd.seek(10)
fd.write(TEST)
fd.close()
...然后您会发现该文件现在包含This IS a TEST file.。
所有这一切都适用于Unix系统并且可以测试这些例子以确保。但是我有混合的问题read()并write()在Windows系统上。例如当我在Windows机器上执行该第一个示例时它可以正确打印This但是之后再检查该文件时该文件将write()被完全忽略。但是第二个示例使用seek()在Windows上似乎可以正常工作。
总而言之如果您想在Windows中从文件的中间进行读取/写入建议您始终使用显式seek()而不是依赖于读取/写入指针的位置。如果您只做读或写操作那就很安全了。
最后一点-如果您将Windows上的路径指定为文字字符串请记住转义反斜杠
fd open(C:\\Users\\johndoe\\Desktop\\testfile.txt, r)
或者您可以通过r在开始处使用来使用原始字符串
fd open(rC:\Users\johndoe\Desktop\testfile.txt, r)
或最可移植的选择是使用os.path.join()
fd open(os.path.join(C:\\, Users, johndoe, Desktop, testfile.txt), r)
您可以在官方Python文档中找到有关文件IO的更多信息。