2012-03-13 87 views
1

我有大约4000万行文本需要解析,我想将每行视为一个拆分字符串,然后要求使用多个切片(或下标,无论它们被称为)使用我在方法中生成的数字列表。基于迭代列表中的索引列表访问项目

# ... 
other_file = open('output.txt','w') 
list = [1, 4, 5, 7, ...] 
for line in open(input_file): 
    other_file.write(line.split(',')[i for i in list]) 

标不能拿这个发生器我已经展示了,但是我想问问在它的多个条目的分割线而不必通过在每一行的列表进行迭代。

我很抱歉,我知道这是一个简单的答案,但我无法想到它。这么晚了!

+0

你想在分开的行上使用每一项(即'line'中的元素)吗? – Hamish 2012-03-13 06:25:26

回答

3

不要使用list作为变量名 - 记得有一个叫list

other_file = open('output.txt','w') 
lst = [1,4,5,7,...] 
for line in open(input_file): 
    fields = line.split(',') 
    other_file.write(",".join(fields[i] for i in lst) + "\n") 

进一步改进使用上下文经理打开/关闭文件,你

4

CSV模块可帮助内置你

import csv 
reader = csv.reader(open(input_file, 'r')) 
writer = csv.writer(open(output_file, 'w')) 
fields = (1,4,5,7,...) 
for row in reader: 
    writer.writerow([row[i] for i in fields]) 

进一步改进,打开的文件与context managers

1
from operator import itemgetter 
from csv import reader, writer 

fields = 1,4,5,7 

row_filter = itemgetter(*fields) 

with open('inp.txt', 'r') as inp: 
    with open('out.txt', 'w') as out: 
     writer(out).writerows(map(row_filter, reader(inp)))