2012-03-13 111 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)))