相关疑难解决方法(0)

我应该如何在Python中逐行读取文件?

在史前时期(Python 1.4),我们做到了:

fp = open('filename.txt')
while 1:
    line = fp.readline()
    if not line:
        break
    print line
Run Code Online (Sandbox Code Playgroud)

在Python 2.1之后,我们做了:

for line in open('filename.txt').xreadlines():
    print line
Run Code Online (Sandbox Code Playgroud)

在我们在Python 2.3中获得方便的迭代器协议之前,可以做到:

for line in open('filename.txt'):
    print line
Run Code Online (Sandbox Code Playgroud)

我见过一些使用更详细的例子:

with open('filename.txt') as fp:
    for line in fp:
        print line
Run Code Online (Sandbox Code Playgroud)

这是前进的首选方法吗?

[编辑]我得到了with语句确保关闭文件...但为什么不包含在文件对象的迭代器协议中?

python python-2.7 python-3.x

132
推荐指数
3
解决办法
32万
查看次数

Python文件迭代器在二进制文件中使用较新的习惯用法

在Python中,对于二进制文件,我可以这样写:

buf_size=1024*64           # this is an important size...
with open(file, "rb") as f:
   while True:
      data=f.read(buf_size)
      if not data: break
      # deal with the data....
Run Code Online (Sandbox Code Playgroud)

有了我想逐行阅读的文本文件,我可以这样写:

with open(file, "r") as file:
   for line in file:
       # deal with each line....
Run Code Online (Sandbox Code Playgroud)

这是简写​​:

with open(file, "r") as file:
   for line in iter(file.readline, ""):
       # deal with each line....
Run Code Online (Sandbox Code Playgroud)

这个成语记录在PEP 234中,但我找不到二进制文件的类似习惯用法.

我试过这个:

>>> with open('dups.txt','rb') as f:
...    for chunk in iter(f.read,''):
...       i+=1

>>> i
1                # 30 MB file, …
Run Code Online (Sandbox Code Playgroud)

python iterator file

24
推荐指数
4
解决办法
2万
查看次数

将1.2GB边的列表转换为稀疏矩阵

我在文本文件中有一个1.2GB的边缘列表.我的ubuntu PC有8GB的RAM.输入中的每一行都是如此

287111206 357850135
Run Code Online (Sandbox Code Playgroud)

我想将其转换为稀疏邻接矩阵并将其输出到文件.

我的数据的一些统计数据:

Number of edges: around 62500000
Number of vertices: around 31250000
Run Code Online (Sandbox Code Playgroud)

我之前在/sf/answers/2706735111/问了很多相同的问题并得到了很好的答案.问题是我无法让它发挥作用.

我首先尝试使用np.loadtxt加载文件,但它非常慢并且使用了大量内存.所以相反我转移到pandas.read_csv这是非常快,但这导致它自己的问题.这是我目前的代码:

import pandas
import numpy as np
from scipy import sparse

data = pandas.read_csv("edges.txt", sep=" ", header= None, dtype=np.uint32)
A = data.as_matrix()
print type(A)
k1,k2,k3=np.unique(A,return_inverse=True,return_index=True)
rows,cols=k3.reshape(A.shape).T
M=sparse.coo_matrix((np.ones(rows.shape,int),(rows,cols)))
print type(M)
Run Code Online (Sandbox Code Playgroud)

问题是pandas数据框data很大,我在A中有效地复制了一个低效的副本.然而,随着代码崩溃,事情变得更糟

<type 'instancemethod'>
Traceback (most recent call last):
  File "make-sparse-matrix.py", line 13, in <module>
    rows,cols=k3.reshape(A.shape).T
AttributeError: 'function' object has no attribute 'shape'
raph@raph-desktop:~/python$ python make-sparse-matrix.py 
<type 'numpy.ndarray'>
Traceback (most recent …
Run Code Online (Sandbox Code Playgroud)

python optimization numpy scipy pandas

10
推荐指数
1
解决办法
2136
查看次数

python头,尾和向后读取文本文件的行

如何实现python中的'head'和'tail'命令以及文本文件的行后向读取?

python reverse file tail head

9
推荐指数
2
解决办法
3万
查看次数

在大文本文件中查找重复记录

我在一台 linux 机器(Redhat)上,我有一个 11GB 的文本文件。文本文件中的每一行都包含单个记录的数据,该行的前 n 个字符包含该记录的唯一标识符。该文件包含略多于 2700 万条记录。

我需要验证文件中没有多个具有相同唯一标识符的记录。我还需要对 80GB 文本文件执行此过程,因此任何需要将整个文件加载到内存中的解决方案都不实用。

python linux bash shell

6
推荐指数
1
解决办法
8115
查看次数

Python - 打开和更改大文本文件

我有一个~600MB的Roblox类型.mesh文件,它在任何文本编辑器中都像文本文件一样读取.我有以下代码:

mesh = open("file.mesh", "r").read()
mesh = mesh.replace("[", "{").replace("]", "}").replace("}{", "},{")
mesh = "{"+mesh+"}"
f = open("p2t.txt", "w")
f.write(mesh)
Run Code Online (Sandbox Code Playgroud)

它返回:

Traceback (most recent call last):
  File "C:\TheDirectoryToMyFile\p2t2.py", line 2, in <module>
    mesh = mesh.replace("[", "{").replace("]", "}").replace("}{", "},{")
MemoryError
Run Code Online (Sandbox Code Playgroud)

以下是我的文件示例:

[-0.00599, 0.001466, 0.006][0.16903, 0.84515, 0.50709][0.00000, 0.00000, 0][-0.00598, 0.001472, 0.00599][0.09943, 0.79220, 0.60211][0.00000, 0.00000, 0]
Run Code Online (Sandbox Code Playgroud)

我能做什么?

编辑:

我不确定head,follow和tail命令在那个标记为重复的其他线程中是什么.我试图使用它,但无法让它工作.该文件也是一条巨行,它不会分成几行.

python replace out-of-memory large-files

5
推荐指数
1
解决办法
3373
查看次数

单行文件太大了?

在python中,我正在读取一个大文件,我想将每一行(经过一些修改后)添加到一个空列表中.我想这只做前几行,所以我做了:

X = []
for line in range(3):

    i = file.readline()
    m = str(i)
    X.append(m)
Run Code Online (Sandbox Code Playgroud)

但是,出现错误,并表示该行存在MemoryError i = file.readline().

我该怎么办?即使我将范围设为1也是一样(虽然我不知道它对线的影响,因为它在循环内部).

我怎么没有得到错误代码?我正在迭代,我不能把它变成二进制文件,因为文件不只是整数 - 有小数和非数字字符.

txt文件是5演出.

有任何想法吗?

python file

5
推荐指数
1
解决办法
100
查看次数

确定文件“更有可能”是 json 还是 csv

我有一些带有通用扩展名的文件,例如“txt”或根本没有扩展名。我试图以非常快速的方式确定文件是 json 还是 csv。我想过使用该magic模块,但它不适用于我正在尝试做的事情。例如:

>>> import magic
>>> magic.from_file('my_json_file.txt')
'ASCII text, with very long lines, with no line terminators'
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来确定某些东西是 json 还是 csv?我无法加载整个文件,我想以非常快速的方式确定它。这里有什么好的解决方案?

python mime python-3.x

5
推荐指数
1
解决办法
1408
查看次数

Python生成器读取大型CSV文件

我需要编写一个Python生成器,它生成来自两个不同CSV文件的元组(X,Y).

它应该在init上接收批量大小,从两个CSV逐行读取,为每一行产生一个元组(X,Y),其中X和Y是数组(CSV文件的列).

我看过懒惰阅读的例子,但我发现很难将它们转换为CSV:

此外,遗憾的是,在这种情况下,Pandas Dataframes不是一个选项.

我可以从哪个片段开始?

谢谢

python csv numpy bigdata

3
推荐指数
1
解决办法
6893
查看次数

IOError: [Errno 24] 打开文件太多 -Python、Windows

我在 Windows 上使用 Python 将一个大文件(几 GB)拆分为许多较小的文件。该文件按行内容分割,因此我需要同时打开所有小文件,并将内容写入其中。

IOError: [Errno 24] Too many open files在尝试打开其中一个文件时发现,根据调试器,已经有 507 个打开的文件。

有没有办法提高允许的最大打开文件数?

我在 macOS 中了解了该ulimit选项,但在 Windows 上找不到等效的选项。

另外-为什么我在 507 文件后会收到此错误?这是具体的最大值吗?

谢谢

windows io

1
推荐指数
1
解决办法
6294
查看次数

Python读取大文本文件

我试图逐行比较两个大文本文件(每个10GB)而不将整个文件加载到内存中.我使用了以下代码,如其他线程所示:

with open(in_file1,"r") as f1, open(in_file2,"r") as f2:
    for (line1, line2) in zip(f1, f2):
        compare(line1, line2)
Run Code Online (Sandbox Code Playgroud)

但似乎python无法逐行读取文件.我观察到运行代码时的内存使用率> 20G.我也试过用:

import fileinput
for (line1, line2) in zip(fileinput.input([in_file1]),fileinput.input([in_file2])):
    compare(line1, line2)
Run Code Online (Sandbox Code Playgroud)

这个也尝试将所有内容加载到内存中.我在Centos 5.9上使用Python 2.7.4,并且我没有在代码中存储任何行.

我的代码出了什么问题?我应该如何更改它以避免将所有内容加载到RAM中?

python file-io file

0
推荐指数
1
解决办法
367
查看次数