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(","):
使用stringsplit()
方法按逗号分割内容
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