PYTHON Re:性能:从文本文件中的特定行开始读取一行并根据选项卡将其拆分,然后访问每个元素。

问题描述 投票:0回答:2

根据标题,问题是我想要做以下事情:

  1. 从特定行x开始直到文件末尾读取每一行。铌。我不想使用readline(),因为它将整个文件读取到内存中,并且在测试时,我在部署它的服务器上非常慢。 (花了15分钟,而在我非常好的电脑上需要30秒)。
  2. 当读取单行时,我想.split(“”)该特定行并将其加载到列表中,以便我可以访问每个元素。

请参阅下面的我的尝试(编辑为敏感):

with open(FileName, "w+") as file:
        file.write(FileName + "," + Quantity + "\n")
        # Start from beginning of data and read each line and take specific data   
        for x in range(StartCount,Quantity+StartCount)):
            os.chdir(FileLocation + country)
            with open(OutputFileName, 'r') as OutputFile:    
                for x, line in enumerate(OutputFile):
                    OutputFileData = [line.split("  ") for line in OutputFile]

                    #Select data you want for file from output file. Nb OutputFileData[1][:-1] removed extra part of a column
                    try:
                        FileData = OutputFileData[0]+ "," + OutputFileData[1][:-1] + "," + OutputFileData[2]

....然后我继续将文件数据附加到我正在创建的文件中。

注意我的代码在我使用时工作正常:

with open(OutputFileName, 'r') as OutputFile:    
                lines=OutputFile.readlines()
                temp = lines[x]
                OutputFileData = temp.split("   ")

但正如我之前所说,我相信当我在服务器上运行它时脚本的缓慢是因为它不断迭代:lines = OutputFile.readlines()导致它减慢..所以当我检查文件我试图创建我将看到它停在一定数量的线,然后它只是挂起..

请帮我找出更好的方法。

python python-3.x
2个回答
1
投票

刚回来说当时的问题实际上并不是我的代码,只是服务器真的那么慢。所以我最终让代码在各台机器上运行,然后将数据丢弃到需要它的服务器上。这种性能得到了极大的改善。


0
投票

如何一次读取N行并处理“块”中的行,然后重复该过程。像这样的东西:

```

textfile = "f:\\mark\\python\\test.txt"


def read_n(file, x):
    with open(file, mode='r') as fh:
        while True:
            data = ''.join(fh.readline() for _ in range(x))

            if not data:
                break

            yield data


for nlines in read_n(textfile, 5):
    print(nlines)

```

哪个收益率(来自我的简单示例文件):

abc
123
def
456
ghi

789
jkl
abc
123
def

456
ghi
789
jkl
abc

123
def
456
ghi
789

jkl
abc
123
def
456

ghi
789
jkl

我只是以块的形式打印线条,但您可以执行您正在进行的任何处理。

© www.soinside.com 2019 - 2024. All rights reserved.