2016-05-01 3 views
1

Так что я хочу иметь функцию, которая может читать файл и быть в состоянии подсчитать материал в них. До сих пор у меня есть это:Итереть через файл и обработать его

import csv 
def get_stats(train_file, valid_pfile = "cmu-phonemes.txt", valid_graphemes = 
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '_'}): 

    invalid_row = 0 
    valid_row = 0 
    phonemes_count = 0 
    graphemes_count = 0 
    underscore_count = 0 

    csv_open = open(train_file) 
    reader = csv.reader(csv_open) 

    with open(valid_pfile) as valid_p: 
     valid_pset = set(line.strip() for line in valid_p) 
    valid_gset = set(valid_graphemes) 

Как вы, возможно, подозреваете, что я хочу подсчитать числа некоторых конкретных вещей. Но это не обязательно сложно. Дело в том, что я не могу понять способ перебора файла и сделать еще один подсчет.

Вот пример файла:

phonemes,graphemes 
W IY K D EY,w ee k d ay 
T EH K S T,t e x _ t 
Y UW,ewe _ 
SH UW T,chu te 
SH UW T,chu te 
SH UW T,chu te ! 
SX AH K,s u ck 

Вопрос заключается в том, как я перебирать файл и разделить их, что «» в середине (в формате CSV) Так что я мог бы что-то вроде

[["SH", "UW", "T"],["chu", "te"]] 

Или что-то в этом роде, которое может использоваться для циклирования и проверки.

+0

Вы пробовали 'line.split (',')'? – Pouria

+0

Вы, кажется, уже итерации по файлу. Это 'line.split (',')' вы ищете? Что еще тебе нужно? – cdarke

+0

@cdarke, который фактически создал бы два разных списка или контейнерные объекты? –

ответ

1
file_output = [] 
with open(valid_pfile, 'r') as f: 
    for line in f.readlines()[1:]: # ignoring the first line which is header 
     file_output.append([v.split() for v in line.split(',')]) 

После этого блока значение file_output будет:

[[['W', 'IY', 'K', 'D', 'EY'], ['w', 'ee', 'k', 'd', 'ay']], 
[['T', 'EH', 'K', 'S', 'T'], ['t', 'e', 'x', '_', 't']], 
[['Y', 'UW'], ['ewe', '_']], 
[['SH', 'UW', 'T'], ['chu', 'te']], 
[['SH', 'UW', 'T'], ['chu', 'te']], 
[['SH', 'UW', 'T'], ['chu', 'te', '!']], 
[['SX', 'AH', 'K'], ['s', 'u', 'ck']]] 

Теперь вы можете использовать этот способ, которым Вы хотите.