我通常在Python中读取这样的文件:
f = open('filename.txt', 'r')
for x in f:
doStuff(x)
f.close()
Run Code Online (Sandbox Code Playgroud)
但是,这会按换行符拆分文件.我现在有一个文件,它的所有信息都在一行中(45,000个字符串用逗号分隔).虽然这个大小的文件使用类似的东西读取是微不足道的
f = open('filename.txt', 'r')
doStuff(f.read())
f.close()
Run Code Online (Sandbox Code Playgroud)
我很好奇,如果一个更大的文件全部在一行中,就可以实现与第一个代码片段类似的迭代效果,但是用逗号而不是换行符或任何其他字符进行拆分?
以下函数是一种非常简单的方法来执行您想要的操作:
def file_split(f, delim=',', bufsize=1024):
prev = ''
while True:
s = f.read(bufsize)
if not s:
break
split = s.split(delim)
if len(split) > 1:
yield prev + split[0]
prev = split[-1]
for x in split[1:-1]:
yield x
else:
prev += s
if prev:
yield prev
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它:
for item in file_split(open('filename.txt')):
doStuff(item)
Run Code Online (Sandbox Code Playgroud)
这应该比EMS链接的解决方案更快,并且对于大文件一次读取整个文件将节省大量内存.
| 归档时间: |
|
| 查看次数: |
3479 次 |
| 最近记录: |