从不一致分隔的csv文件返回特定值

时间:2018-03-19 15:06:55

标签: python string python-3.x csv split

这个问题看起来很简单,但是几小时后我就堆叠了,这就是我的数据:

\N
PARIS PREMIERE,1375,7
RTL9,1376,7
TV BREIZH,1162,7
C+ CINEMA,1594,7
\N
C+ SPORT,1595,7
OCS MAX,799,7

我想要的输出是:

1375
1376
1162
1594
1595
799

为此,我运行此代码:

    list_data = data.split('\n')
    for line in list_data:
        for s in line.split(','):
            params = s.split('\n')

但似乎没有用。如果您有任何想法我如何解决我的问题请帮助。 谢谢!

3 个答案:

答案 0 :(得分:1)

params = []
list_data = data.split('\n')
    for line in list_data:
        if len(line.split(',')) == 3
            params.append(line.split(',')[1])

答案 1 :(得分:1)

您可以过滤所有不需要的分隔符:

import csv
with open('filename.csv') as f:
  data = [int(i[-2]) for i in csv.reader(f) if len(i) > 1 or i[0] != '\\N']
  print(data)

输出:

[1375, 1376, 1162, 1594, 1595, 799]

答案 2 :(得分:0)

使用pandas返回所需列表的一种方式:

import pandas as pd
from io import StringIO

mystr = StringIO(r"""\N
PARIS PREMIERE,1375,7
RTL9,1376,7
TV BREIZH,1162,7
C+ CINEMA,1594,7
\N
C+ SPORT,1595,7
OCS MAX,799,7""")

df = pd.read_csv(mystr, header=None, delimiter='~')

res = df.loc[df[0] != r'\N', 0].str.split(',').str[-2].astype(int).tolist()

结果:

[1375, 1376, 1162, 1594, 1595, 799]

然后,您可以使用此列表执行您喜欢的操作,例如:写入文件,在程序中的其他地方使用,等等。