Pythonic在非换行符上迭代文件的方式

Pythonic在非换行符上迭代文件的方式,python,Python,要逐行迭代文件,可以执行以下操作- for line in f: (其中f是文件迭代器) 我想用逗号分隔的块来迭代文件,而不是用换行符分隔的块。我可以读取所有行,然后用逗号拆分字符串,但是pythonic的方法是什么呢?在进行拆分时迭代,这样就不需要存储所有行: for line in f: for lines in line.split(","): 使用stringsplit()方法按逗号分割内容 e、 g 逐行迭代文件,每行用逗号进行迭代 >>> with

要逐行迭代文件,可以执行以下操作-

for line in f: 
(其中f是文件迭代器)


我想用逗号分隔的块来迭代文件,而不是用换行符分隔的块。我可以读取所有行,然后用逗号拆分字符串,但是pythonic的方法是什么呢?

在进行拆分时迭代,这样就不需要存储所有行:

for line in f: 
    for lines in line.split(","):
使用string
split()
方法按逗号分割内容

e、 g

逐行迭代文件,每行用逗号进行迭代

>>> with open(input_file, "rb") as fp:
...    for f in fp:
...       for i in f.split(","):
...            i

如果您确实需要扫描一个巨大的(例如1TB)单行文件并按分隔符处理项目,则可以按块读取文件、拆分它们并处理边框效果。这里有一个发电机,它可能有助于:

def split_file(file, delim, block_size=1024*1024):
    block = True
    last_item = ''
    while block:
        block = file.read(block_size)
        items = block.split(delim)
        for i in xrange(len(items)-1):
            item = items[i]
            if last_item:
                yield last_item + item
                last_item = ''
                continue
            if item:
                yield item
        last_item += items[-1]
您可以这样简单地使用它:

f = open("names.in.txt")
for name in split_file(f, ","):
    print name # process one item there

谢谢你的回复!想一想一个换行符在两个逗号之间的情况。@魔术师,不用担心。这将节省您在内存中存储所有行和拆分行的时间,对于一个大文件来说,这可能是一个问题。@VivekSable,恐怕我对django几乎一无所知@帕德雷坎宁厄姆:好的,没问题。如果你发现了类似的东西,那么就在问题中添加。这就扼杀了在文件对象上迭代的全部意义。考虑一个文件,它的大小是系统内存的两倍或三倍。@thefourtheye不是像0.1%的情况吗?你认为这会因为内存耗尽而失败多少次?@thefourtheye:是的,但我们逐行读取文件,这样它就不会以逗号分隔。@两位化学家好的,为什么我们更喜欢在文件对象上迭代而不是
fp.read().split(“\n”)
?@thefourtheye思想实验:我们是否也应该避免在这里使用
split
,因为它返回一个列表,并且可能有一个文件只有一行(无
\n
)会导致系统内存不足?
f = open("names.in.txt")
for name in split_file(f, ","):
    print name # process one item there