2017-07-15 157 views
0

我有csv文件。当我通过VisualStudio中打开它,我有这样的事情:如何读取csv文件行并将列表中的元素分为列表列表?

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] 

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

我该怎么做?

回答

1

他们是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 
+0

它工作正常,但在最后一个元素的每个列表中都有'place \ n' - > “\ n”标志。我怎样才能摆脱它? – JeyKey

2

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

import csv 

f = open('file.csv') 

the_data = list(csv.reader(f, delimiter r'\t'))[1:] 
+0

'与open'更好。 – narn

+0

我尝试: 张开( “file_name.csv”, 'R')为f: the_data =列表(csv.reader(F))[:1] 打印(the_data) 和它打印: [ ['nr1 \ tnr2 \ tnr3 \ tname \ tplace']] – JeyKey

+0

'csv.reader(f,delimiter r'\ t')' – Kelvin

0

试试这个

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) 
0

使用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']] 
相关问题