2016-08-17 4 views
0

У меня есть файл, где мне нужно разобрать и построить в единый ряд из нескольких подряд с помощью PythonPython Разбор нескольких файлов колонки

NAME ID 

TITLE DEP 

USER1 0023 

S1 SALES 

USER2 0022 

A2 ACCOUNT 

Как вы можете видеть здесь заголовок файла являются NAME, ID, TITLE , DEP

Я хочу печатать выходные данные, как показано ниже, поэтому я могу легко читать в csv-файле и делать другие вещи легко.

NAME, ID, TITLE, DEP 
USER1,0023,S1,SALES 
USER2,0022,A2,ACCOUNT 

Ниже приведен код, с которого я начал, но не смог добраться туда, где хочу. Я попытался с различными вариантами разделить и заменить, но не работал.

import csv 
file =open('test_file_parse.csv','r') 
out_file=open('test_out.csv','w') 
lines = file.readlines() 
file.close() 
for line in lines: 
    line=line.strip() 
    print (line) 

Любая помощь приветствуется

+0

Почему бы вам не использовать что-то вроде 'sed' присоединиться пары линий, а затем обработать его как обычный файл с разделителями? –

ответ

0

Имея все слова в файле с именем file.txt вот код:


# read all the words 
with open('file.txt') as f: 
    words = f.read().split() 

# convert to groups of 4-s 
groups4 = [words[i:i+4] for i in range(0, len(words), 4)] 

# convert to lines with commas using join() 
lines = [', '.join(lst) for lst in groups4] 

# and here is the result 
for line in lines: 
    print(line) 

Выход:

NAME, ID, TITLE, DEP 
USER1, 0023, S1, SALES 
USER2, 0022, A2, ACCOUNT 
+0

Зависит от размера файла. Это требует, чтобы вы могли редактировать все это сразу в памяти. –

+1

Спасибо! это сработало. – lkv

+0

Как вы можете обрабатывать пустой файл/столбец в этом случае? – lkv

0
infile = open('test_file_parse.csv','r') 
def custom_func(x): 
    return next(x).strip().split() 
while infile: 
    try: 
     print ','.join(reduce(lambda x, y: x + y, (custom_func(infile) for z in range(4)))) 
    except TypeError: 
     break 
infile.close() 
+0

Можете ли вы рассказать о том, как этот код решит проблему OP? – brandonscript

0

Если вы знаю, что все будет p арии из двух линий, и вы знаете, что вы можете игнорировать пустые строки, вы могли бы сделать что-то вроде:

infile = open('test_file_parse.csv', 'r') 

# A generator that yields the non-empty lines, without newlines. 
lines = (l.strip() for l in infile if l.strip()) 

# An iterator to iterate over the yielded lines. 
line_iter = iter(lines) 

# A generator to yield space-separated combined lines. 
new_lines = (' '.join(l_pair) for l_pair in zip(line_iter, line_iter)) 

# Lastly, a generator to yield proper csv for the lines. 
csv_lines = (','.join(l.split()) for l in new_lines) 

for line in csv_lines: 
    print line 
+0

Обратите внимание: поскольку это использует генераторные возможности и итератор, он должен работать на произвольно больших входных файлах, не требуя, чтобы все было в памяти сразу. –

Смежные вопросы