2017-07-15 16 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']] 
相關問題