2013-04-11 2 views
1

Я пытаюсь разобрать файл с разделителями каналов и передать значения в список, чтобы позже я мог печатать выборочные значения из списка.Разбор файла с разделителями строк в python

файл выглядит следующим образом:

name|age|address|phone|||||||||||..etc 

Он имеет более чем 100 столбцов.

+0

Хороший вопрос будет иметь пример кода и любые ошибки, возникающие при попытке запустить код. – sachleen

+2

[Вы уже задали этот вопрос, и он был закрыт.] (Http://stackoverflow.com/questions/15822744/file-parsing-in-python-for-a-pipe-delimited-file) Что заставляет вас думать об этом время будет другим? – jwodder

+3

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

ответ

12

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

fileHandle = open('file', 'r') 

for line in fileHandle: 
    fields = line.split('|') 

    print(fields[0]) # prints the first fields value 
    print(fields[1]) # prints the second fields value 

fileHandle.close() 
+0

Я использовал метод split string, но он только печатает «n» из первого разделенного столбца (name). –

+0

Если вы буквально скопируете и вставьте мой код в текстовый файл и запустите его, вы увидите, что он работает. Возможно, вы могли бы поделиться некоторыми из своего кода, чтобы мы могли понять, что происходит не так? – vimist

+0

с открытым ("abc.txt", "r") в качестве infile: data = infile.read() fields = data.split ('|') print (data [0]) –

19

Используйте csv library.

Во-первых, зарегистрировать свой диалект:

import csv 
csv.register_dialect('piper', delimiter='|', quoting=csv.QUOTE_NONE) 

Затем используйте свой диалект на файл:

with open(myfile, "rb") as csvfile: 
    for row in csv.DictReader(csvfile, dialect='piper'): 
     print row['name'] 
3
import pandas as pd 

pd.read_csv(filename,sep="|") 

Это сохранит файл в dataframe. Для каждого столбца вы можете применить условия для выбора требуемых значений для печати. Для выполнения требуется очень короткое время. Я пробовал с 111047 рядами.

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