迭代文件并处理它

时间:2016-05-01 09:14:49

标签: python csv python-3.4

所以我希望有一个能够读取文件并能够计算其中内容的函数。到目前为止,我有这个:

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

问题是如何迭代文件并将其与#34;,"分开。在中间(csv格式) 所以我可以有像

这样的东西
[["SH", "UW", "T"],["chu", "te"]]

或类似的东西,可用于循环和检查。

1 个答案:

答案 0 :(得分: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']]]

现在,您可以按照自己的方式使用它。