2017-08-10 59 views
0

這方面的Python 2.7Python的CSV閱讀 - 我想我正在做一個列表的列表,但我只想要一個列表

我有一個csv文件,soq1,看起來像這樣在記事本中:

csv file in Notepad

我用這個代碼的文件中讀取並顯示列表soq1的內容:

import csv 
with open('D:\Users\Richard\Python\soq1.csv','rb') as csvfile: 
    readCSV = csv.reader(csvfile, delimiter=',') 
    soq1=list(readCSV) 

print(soq1) 
print(type(soq1)) 
print(len(soq1)) 

與結果: results

我期待soq1看起來像: [ '2', '3', '4', '5', '6']

換言之,沒想到有額外的一組方括號。 我創建了一個列表清單嗎?

我做錯了什麼?

+0

是的,你擁有的每 –

+1

你得到一個列表的列表,因爲在一個CSV每一行一般有多個列,你看行時間列表的列表。 如果情況並非如此,爲什麼要做所有的CSV?您可以將您的文本文件讀入平面列表。 https://stackoverflow.com/questions/3277503/how-do-i-read-a-file-line-by-line-into-a-list – trs

回答

1

你沒有做錯任何事 - (這是有道理的,每行多個條目的CSV)的csv模塊僅返回每行一個列表

您可以拼合使用

soq2 = [elt for lst in soq1 for elt in lst] 
列表

雖然這樣一個簡單的文件,你並不真的需要處理它作爲一個CSV在所有(也沒關係文件的擴展名是什麼)你可能只是這樣做:

with open(my_file) as f: 
    soq1 = [line.strip() for line in f] 
1

每個數字都在一個單獨的行上,這導致csv閱讀器認爲它們是單獨的行而不是列。如果可以,應該更改csv文件,因爲它不是一行csv文件的正確格式。

2

是的,你創建了一個列表的列表,但這是故意的,因爲從本質上講,CSV文件的目的是用新行分隔單獨的條目,並且每個條目中的單獨屬性用逗號分隔(爲什麼他們稱之爲逗號分隔值)。

順便說一句,這不是一個正確的CSV文件。慣例是第一行(也稱爲標題行)應表示逗號分隔的字符串,描述每個值在連續行/條目中的含義。

如果您要閱讀該文件並生成['2','3','4','5','6'],則csv.reader不適合您的特定用例。您需要閱讀每一行,並將其附加到列表中,或者讀入整個文件並使用\n作爲分隔符將其分割成列表。

1

csv.reader爲文件中的每一行創建一個列表。在大多數情況下這是有意義的,因爲大多數csv文件不是單列。

您可以隨時與理解拼合列表:

foo = [item for inner in outer for item in inner] 
1

改進代碼

import csv 
with open('D:\Users\Richard\Python\soq1.csv','rb') as csvfile: 
    readCSV = csv.reader(csvfile, delimiter=',') 
    soq1=list(readCSV) #commnt this line 
    for line in readCSV: 
     print line 
     print type(line) 
     print len(line) 

#print(soq1) 
#print(type(soq1)) 
#print(len(soq1)) 
+1

編號'csv.reader'不適合OP的特定用例,因爲他不是在傳統的CSV文件上操作,而且他期望輸出的提示他不明白CSV文件應該如何格式化。 – JoshuaRLi

1

決定把我的評論移動到你的問題的答案,因爲我覺得所有的答案這裏並不反映你想達到的目標。

由於CSV中的每一行通常包含多列,因此您將獲得列表的列表。

如果不是這樣,爲什麼所有的CSV的東西?您可以將您的文本文件讀入平面列表。

How do I read a file line-by-line into a list?

lines = tuple(open(filename, 'r'))

相關問題