有没有办法使用除换行符之外的分隔符在python中循环读取文件

vas*_*ek1 10 python

我通常在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)

我很好奇,如果一个更大的文件全部在一行中,就可以实现与第一个代码片段类似的迭代效果,但是用逗号而不是换行符或任何其他字符进行拆分?

And*_*ark 9

以下函数是一种非常简单的方法来执行您想要的操作:

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链接的解决方案更快,并且对于大文件一次读取整个文件将节省大量内存.