Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阅读python中的大型文本文档_Python - Fatal编程技术网

阅读python中的大型文本文档

阅读python中的大型文本文档,python,Python,我有一个16GB的文本文档文件,其结构如下: name1 1 0 1 0 1 1 1 0 0 1 ... ... nameN 1 1 1 0 1 0 -1 1 0 1 我希望能够对文件执行以下处理: my_dict = {} for line in data.split("\n"): cells = line.split() my_dict[cells[0]] = [int(x) for x in cells[1:]] 问题是,如果我通过以下方式打开文件: open(da

我有一个16GB的文本文档文件,其结构如下:

name1 1 0 1 0 1 1 1 0 0 1 
...
...
nameN 1 1 1 0 1 0 -1 1 0 1
我希望能够对文件执行以下处理:

my_dict = {}

for line in data.split("\n"):
    cells = line.split()
    my_dict[cells[0]] = [int(x) for x in cells[1:]]
问题是,如果我通过以下方式打开文件:

open(data) as f: 
    content = f.readlines()
我得到:

“列表”对象没有“拆分”属性


有没有办法打开文件以进行上述处理?

这是因为
f.readlines()
提供了代表行的字符串列表。它已经按
“\n”
进行了拆分,因此当您尝试进行处理时,请不要按换行符进行拆分:

my_dict = {}

for line in content:
    cells = line.split()
    my_dict[cells[0]] = [int(x) for x in cells[1:]]

最好的方法是

with open(data) as f:
    for line in f:
        cells = line.strip().split()
        # do something

这样,您就不会在内存中多次保存16GB数据(Python2和Python3)。您还应尽量避免保存完整的dict。

是否确实要将整个16 GB加载到一个
dict
?这将需要超过16 GB的内存。如果是这样的话,阿南的回答应该会给你预期的结果。