【问题标题】:Returning a specific value from inconsistently delimited csv file从不一致分隔的 csv 文件返回特定值
【发布时间】:2018-03-19 15:06:55
【问题描述】:

这个问题看起来很简单,但我从几个小时开始就陷入困境,这就是我的数据:

\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')

但它似乎不起作用。如果您有任何想法如何解决我的问题,请提供帮助。 谢谢!

【问题讨论】:

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


    【解决方案1】:
    params = []
    list_data = data.split('\n')
        for line in list_data:
            if len(line.split(',')) == 3
                params.append(line.split(',')[1])
    

    【讨论】:

      【解决方案2】:

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

      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]
      

      【讨论】:

        【解决方案3】:

        它使用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]
        

        然后您可以使用此列表做您喜欢的事情,例如写入文件,在程序的其他地方使用,等等。

        【讨论】:

        • 非常感谢我没想过使用 pandas 你的代码就像魔法一样工作!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 2020-03-25
        • 1970-01-01
        相关资源
        最近更新 更多