如果我需要行数并且需要附加到文件中,我可以避免处理一个文件两次吗?

2024-09-30 01:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在分阶段将文件写入磁盘。当我写它的时候,我需要知道我正在写的用来建立索引的行号。文件现在有1200万行,所以我需要动态地建立索引。我分四个步骤来完成这项工作,其中有四组我正在索引的值。基于我在其他地方找到的一些例子,所以我决定在开始编写之前获取文件的行大小,这样我就可以使用这个计数来继续构建索引,以保持函数尽可能干净。在

所以我遇到了这个问题,理论上我不知道是将第一个块还是最后一个块添加到我的文件中,所以我想获得当前的大小

myFile=open(r'C:\NEWMASTERLIST\FULLLIST.txt','a')
try:
    num_lines=sum(1 for line in myFile)
except IOError:
    num_lines=0

当我这样做时,结果总是0—即使myFile存在并且有一个num\u lines>;0

如果我改为这样做:

^{pr2}$

如果myFile存在,我得到正确的值。如果我的文件不存在,如果我在第一个周期,我会得到一个错误消息。在

在我写这个问题的时候,我突然想到,在每个文件存在的情况下,num_lines=0的原因是因为文件正在被打开以附加到,所以文件在最后一行被打开,现在正在等待行被传递。所以这就解决了问题

try:
    myFile=open(r'C:\NEWMASTERLIST\FULLLIST.txt')
    num_lines=sum(1 for line in myFile)

except IOError:
    num_lines=0

我的问题是这是否可以用另一种方式来做。我要求的原因是我现在必须关闭我的文件并重新打开它以附加:

这就是我现在要做的工作,我有了文件中已经存在的数据的结束索引号

myFile.close()
myFile=open(r'C:\NEWMASTERLIST\FULLLIST.txt','a')

现在,我可能在这里学到了一些东西-如果我必须打开文件两次,那么可能应该将获取起始索引(num_lines)移到函数中

def getNumbLines(myFileRef):
    try:
        myFile=open(myFileRef)
        num_lines=sum(1 for line in myFile)
        myFile.close()
    except IOError:
        num_lines=0
    return num_lines

如果我不必打开/处理文件两次,那会更干净。在

根据埃里克·温德林的回答,我可以:

myFile=open(r'C:\NEWMASTERLIST\FULLLIST.txt','a+')
num_lines=sum(1 for line in myFile)

谢谢


Tags: 文件intxtforlineopenmyfilenum
3条回答

您可以打开文件进行读写:

myFile=open(r'C:\NEWMASTERLIST\FULLLIST.txt','r+')

试试看。在

更新:啊,我的错误,因为文件可能不存在。使用“a+”而不是“r+”。

我假设你正在写这个文件,那么为什么不单独记录你已经写了多少行呢? 在我看来,为了得到行号而不得不逐行阅读整个文件,这看起来非常浪费。在

打开文件进行更新(“u”或“rw”,我忘了)。现在您可以一直读到EOF,然后开始写append。在

相关问题 更多 >

    热门问题