Python:读取和拆分文件的快速方法是什么?

标签 python list file-io split

我需要读取一个文件并将其分成几行,然后用制表符将这些行分成两半,并去除所有语音标记。目前我有工作职能。但是,它相当慢:

temp = []
fp = open(fName, "r")
for line in fp:
    temp.append(line.replace("\"","").rstrip("\n").split("\t"))
print temp

这会将文件拆分为列表列表。它实际上可能只是一个列表,因为只要保留顺序,以后很容易将它重新分成两对。

一定有更快的方法来做到这一点。谁能让我走上正轨?

谢谢!

[edit] 我正在处理的文件很大,但我会添加类似的内容。 (有没有办法在堆栈溢出时上传文件?)

"CARMILLA"  "35"
"JONATHAN R"    "AA2"
"M" "3"
"EMMA"  "350"
"OLD"   "AA"

应该返回:

["CARMILLA", "35", "JONATHON R", "AA2", "M", "3", "EMMA", "350", "OLD", "AA"]

尽管我的代码将它作为 2 个字符串列表的列表返回,这也很好。

抱歉,我可能应该注意到 print 语句代表 return 语句 - 因为我将其从函数中取出,所以我将其更改为 print 以便在这里更有意义。

最佳答案

我认为列表理解会比为每一行调用 .append 更快

from itertools import chain
with open('file.txt') as f:
    lines = chain.from_iterable([l.replace(r'"','').rstrip('\n').split('\t',1) for l in f])

编辑:所以它会产生一个扁平化的列表

>>> 
['CARMILLA', '35', 'JONATHAN R', 'AA2', 'M', '3', 'EMMA', '350', 'OLD', 'AA']

非扁平化版本:

with open('file.txt') as f:
    lines = [l.replace(r'"','').rstrip('\n').split('\t',1) for l in f]

经过一段时间后,发现 OP 是最快的?

import timeit
print("chain, list",timeit.timeit(r"""
with open('file.txt') as f:
    lines = chain.from_iterable([l.replace(r'"','').rstrip('\n').split('\t',1) for l in f])""",setup="from itertools import chain",number=1000))
print("flat       ",timeit.timeit(r"""
with open('file.txt') as f:
    lines = [l.replace(r'"','').rstrip('\n').split('\t',1) for l in f]""",setup="from itertools import chain",number=1000))
print("op's       ",timeit.timeit(r"""temp = []
fp = open('file.txt', "r")
for line in fp:
    temp.append(line.replace("\"","").rstrip("\n").split("\t"))
""",number=1000))
print("jamlyks    ",timeit.timeit(r"""
with open('file.txt', 'rb') as f:
    r = csv.reader(f, delimiter=' ', skipinitialspace=True)
    list(chain.from_iterable(r))""",setup="from itertools import chain; import csv",number=1000))
print("lennart    ",timeit.timeit(r"""
    list(csv.reader(open('file.txt'), delimiter='\t', quotechar='"'))""",setup="from itertools import chain; import csv",number=1000))

产量

C:\Users\Henry\Desktop>k.py
('chain, list', 0.04725674146159321)
('my flat    ', 0.04629905135295972)
("op's       ", 0.04391255644624917)
('jamlyks    ', 0.048360870934994915)
('lennart    ', 0.04569112379085424)

关于Python:读取和拆分文件的快速方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16665856/

相关文章:

c# - 如何在 C# 中读取和写入文件

python - Flask-reST 少使用分页或获得完整响应

python - pandas DataFrame 中列的更短符号

python - 将列表传递给函数以充当多个参数

VBA:验证列表设置

java - ProgressMonitorInputStream - 进度条不显示真实进度

C++ 提高文本文件中字符串 vector 的精度

python - 使用python检查ubuntu中的dd状态

python - 如何列出 Django 中所有与表单相关的错误?

python - 同时删除多个列表范围?