【问题标题】:How to read csv file lines and split elements in line into list of lists?如何读取 csv 文件行并将行中的元素拆分为列表列表?
【发布时间】:2017-07-15 17:04:40
【问题描述】:

我有 csv 文件。当我用 VisualStudio 打开它时,我有这样的东西:

nr1  nr2  nr3  name  place
10  01  02  Jack  New York
10  01  03  David  London
10  02  01  Jasmine  New Jersey

每行元素之间有两个空格,地名中有一个空格。

当我通过 Excel 打开 csv 文件时,每隔一列只有元素。

我不知道如何读取这个 csv 文件以使每一行都成为这样的元素列表:

my_list = [

['10','01','02','Jack','New York']
['10','01','03','David','London']
['10','02','01','Jasmine','New Jersey']]

因为我想在此之后做一些循环:

for line in my_list:
     nr1 = line[0]
     nr2 = line[1]
     nr3 = line[2]
     name = line[3]
     place = line[4]

在这里,我将为每一行创建一个类的实例。

我该怎么做?

【问题讨论】:

    标签: python python-3.x csv


    【解决方案1】:

    试试这个,使用 csv 模块及其reader() 方法:

    import csv
    
    f = open('file.csv')
    
    the_data = list(csv.reader(f, delimiter r'\t'))[1:]
    

    【讨论】:

    • with open 更好。
    • 我试过: with open("file_name.csv", 'r') as f: the_data = list(csv.reader(f))[:1] print(the_data) 它打印: [['nr1\tnr2\tnr3\tname\tplace']]
    【解决方案2】:

    它们是tab delimited csv 文件。这意味着每一列都由制表符 ('\t') 分隔。

    以下代码应该可以工作。
    更新:使用.rstrip()删除\n

    import csv
    
    f = open('data.csv')
    
    data = []
    for line in f:
        data_line = line.rstrip().split('\t')
        data.append(data_line)
    
    print data
    

    【讨论】:

    • 它有效,但在最后一个元素的每个列表中都有 'place\n' -> "\n" 符号。我怎样才能摆脱它?
    • rstrip() 删除空格、制表符、输入、左侧,或 strip() 两种尺寸
    【解决方案3】:

    使用csv 模块可以很容易地做到这一点。唯一的技巧是让输入文件中使用的两个字母分隔符在示例中显示为单个字符 ',',因为它是默认值。

    import csv
    from pprint import pprint
    
    with open('my_data.csv', 'r', newline='') as csv_file:
        reader = csv.reader(line.replace('  ', ',') for line in csv_file)
        my_list = list(reader)
        pprint(my_list)
    

    输出:

    [['nr1', 'nr2', 'nr3', 'name', 'place'],
     ['10', '01', '02', 'Jack', 'New York'],
     ['10', '01', '03', 'David', 'London'],
     ['10', '02', '01', 'Jasmine', 'New Jersey']]
    

    【讨论】:

      【解决方案4】:

      试试这个

      with open("file.csv","r") as file:
         data = file.read()
      
      data = data.strip(' ').split('\n')
      
      for i in len(data):
         data[i] = data[i].strip(' ').split(',')
         for j in len(data[i]):
            data[i][j] = data[i][j].strip(' ')
      print (data)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-14
        • 2021-06-03
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        相关资源
        最近更新 更多