相关疑难解决方法(0)

如何在Python中廉价地获得行数?

我需要在python中获取大文件(数十万行)的行数.记忆和时间方面最有效的方法是什么?

目前我这样做:

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1
Run Code Online (Sandbox Code Playgroud)

有可能做得更好吗?

python text-files line-count

931
推荐指数
18
解决办法
77万
查看次数

逐行处理非常大(> 20GB)的文本文件

我有一些非常大的文本文件需要处理,最大的是大约60GB.

每行在七个字段中有54个字符,我想从前三个字段中删除最后三个字符 - 这应该将文件大小减少大约20%.

我是Python的新手,并且有一个代码可以按照每小时大约3.4 GB的速度完成我想做的事情,但是我需要获得至少10 GB /小时的有价值的练习 - 有没有办法加速这个?这段代码并没有接近挑战我的处理器,所以我做了一个没有受过教育的猜测,它受到内部硬盘读写速度的限制?

def ProcessLargeTextFile():
    r = open("filepath", "r")
    w = open("filepath", "w")
    l = r.readline()
    while l:
        x = l.split(' ')[0]
        y = l.split(' ')[1]
        z = l.split(' ')[2]
        w.write(l.replace(x,x[:-3]).replace(y,y[:-3]).replace(z,z[:-3]))
        l = r.readline()
    r.close()
    w.close()
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.我在Windows 7上使用IDLE Python GUI并拥有16GB的内存 - 也许一个不同的操作系统会更有效率?

编辑:这是要处理的文件的摘录.

70700.642014 31207.277115 -0.054123 -1585 255 255 255
70512.301468 31227.990799 -0.255600 -1655 155 158 158
70515.727097 31223.828659 -0.066727 -1734 191 187 180
70566.756699 31217.065598 -0.205673 -1727 254 255 255
70566.695938 …
Run Code Online (Sandbox Code Playgroud)

python line

42
推荐指数
7
解决办法
5万
查看次数

将大文件(> = 7 GB)合并为一种快速方法

我有三个巨大的文件,只有2列,我需要两个.我想将它们合并到一个文件中,然后我可以将其写入SQLite数据库.

我使用Python并完成了工作,但是花了大约30分钟,我的系统还挂了10个.我想知道是否有更快的方法使用awk或任何其他unix工具.Python中更快的方式也会很棒.代码如下:

'''We have tweets of three months in 3 different files.
Combine them to a single file '''
import sys, os
data1 = open(sys.argv[1], 'r')
data2 = open(sys.argv[2], 'r')
data3 = open(sys.argv[3], 'r')
data4 = open(sys.argv[4], 'w')
for line in data1:
    data4.write(line)
data1.close()
for line in data2:
    data4.write(line)
data2.close()
for line in data3:
    data4.write(line)
data3.close()
data4.close()
Run Code Online (Sandbox Code Playgroud)

python io

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

python是否自动并行化IO和CPU或内存绑定部分?

这是前一个问题的后续问题.

考虑一下这个代码,它比前一个问题中的代码少一些(但仍然比我真实的简单得多)

import sys
data=[]

for line in open(sys.argv[1]):
    data.append(line[-1])

print data[-1]
Run Code Online (Sandbox Code Playgroud)

现在,我期待更长的运行时间(我的基准文件长度为65150224行),可能更长.事实并非如此,它与以前一样在约2分钟内运行!

是data.append()非常轻量级?我不相信,因此我写了这个假代码来测试它:

data=[]
counter=0
string="a\n"

for counter in xrange(65150224):
    data.append(string[-1])

print data[-1]
Run Code Online (Sandbox Code Playgroud)

这运行时间为1.5到3分钟(运行之间存在很大的差异)

为什么我不能在前一个程序中获得3.5到5分钟?显然,data.append()与IO并行发生.

这是个好消息!

但它是如何工作的?它是一个记录的功能吗?我的代码是否有任何要求我应该遵循以使其尽可能地工作(除了负载平衡IO和内存/ CPU活动)?或者只是简单的缓冲/缓存?

再次,我在这个问题上标记了"linux",因为我只对linux特定的答案感兴趣.如果您认为值得做,请随意提供与操作系统无关的内容,甚至其他操作系统的答案.

python linux performance text-files

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

标签 统计

python ×4

text-files ×2

io ×1

line ×1

line-count ×1

linux ×1

performance ×1