在Python中从CSV文件读取数据

时间:2014-11-13 07:14:58

标签: python csv

我正在从包含以下数据的CSV文件(xyz.CSV)中读取数据:

col1,col2,col3,col4
name1,empId1,241682-27638-USD-CIGGNT ,1
name2,empId2,241682-27638-USD-OCGGINT ,1
name3,empId3,241942-37190-USD-GGDIV ,2
name4,empId4,241942-37190-USD-CHYOF ,1
name5,empId5,241942-37190-USD-EQPL ,1
name6,empId6,241942-37190-USD-INT ,1
name7,empId7,242066-15343-USD-CYJOF ,3
name8,empId8,242066-15343-USD-CYJOF ,3
name9,empId9,242066-15343-USD-CYJOF ,3
name10,empId10,241942-37190-USD-GGDIV ,2

当我使用循环迭代它时,我能够通过以下代码按行打印数据并且只能打印column1数据。

file=open( path +"xyz.CSV", "r")
reader = csv.reader(file)
for line in reader:
    t=line[0]
    print t

通过上面的代码,我只能得到第一列。

如果我尝试打印行[1]或行[2],它会给我以下错误。

    file=open( path +"xyz.CSV", "r")
    reader = csv.reader(file)
    for line in reader:
        t=line[1],[2]
        print t

t=line[1],line[2]
IndexError: list index out of range

请建议打印第2列或第3列的数据。

8 个答案:

答案 0 :(得分:12)

以下是我如何获得第2和第3列:

import csv

path = 'c:\\temp\\'

file=open( path +"xyz.CSV", "r")
reader = csv.reader(file)
for line in reader:
    t=line[1],line[2]
    print(t)

结果如下:

('col2', 'col3')
('empId1', '241682-27638-USD-CIGGNT ')
('empId2', '241682-27638-USD-OCGGINT ')
('empId3', '241942-37190-USD-GGDIV ')
('empId4', '241942-37190-USD-CHYOF ')
('empId5', '241942-37190-USD-EQPL ')
('empId6', '241942-37190-USD-INT ')
('empId7', '242066-15343-USD-CYJOF ')
('empId8', '242066-15343-USD-CYJOF ')
('empId9', '242066-15343-USD-CYJOF ')
('empId10', '241942-37190-USD-GGDIV ')

答案 1 :(得分:4)

您的第一行只有一列,因此该过程失败并且不会继续。要解决,只需跳过第一行

>>> with open( path, "r") as file:
...     reader = csv.reader(file)
...     for idx,line in enumerate(reader):
...         if idx>0:
...             t=line[1],line[2]
...             print t
... 
('empId1', '241682-27638-USD-CIGGNT ')
('empId2', '241682-27638-USD-OCGGINT ')
('empId3', '241942-37190-USD-GGDIV ')
('empId4', '241942-37190-USD-CHYOF ')
('empId5', '241942-37190-USD-EQPL ')
('empId6', '241942-37190-USD-INT ')
('empId7', '242066-15343-USD-CYJOF ')
('empId8', '242066-15343-USD-CYJOF ')
('empId9', '242066-15343-USD-CYJOF ')
('empId10', '241942-37190-USD-GGDIV ')

答案 2 :(得分:1)

希望它能解决问题

import csv
file=open( "xyz.CSV", "r")
reader = csv.reader(file)
for line in reader:
    t=line[0]+","+line[1]
    print (t)

答案 3 :(得分:0)

import csv
csv_file=open("xyz.csv", "r")
reader = csv.reader(csv_file)

for row in reader:
    print(" ".join(row[:2]))

Output :- 
col1 col2
name1 empId1
name2 empId2
name3 empId3
name4 empId4
name5 empId5
name6 empId6
name7 empId7
name8 empId8
name9 empId9
name10 empId10

只需将行中的值作为切片放入。下面是打印第二和第三列的代码。

import csv
csv_file=open("xyz.csv", "r")
reader = csv.reader(csv_file)

for row in reader:
    print(" ".join(row[1:3]))

output:
col2 col3
empId1 241682-27638-USD-CIGGNT 
empId2 241682-27638-USD-OCGGINT 
empId3 241942-37190-USD-GGDIV 
empId4 241942-37190-USD-CHYOF 
empId5 241942-37190-USD-EQPL 
empId6 241942-37190-USD-INT 
empId7 242066-15343-USD-CYJOF 
empId8 242066-15343-USD-CYJOF 
empId9 242066-15343-USD-CYJOF 
empId10 241942-37190-USD-GGDIV 

答案 4 :(得分:0)

要在Python中读取和写入文本文件,可以使用以下语法:

f = open('helloworld.txt','r')
message = f.read()
print(message)
f.close()


f = open('helloworld.txt','w')
f.write('hello world')
f.close()

要阅读CSV文件,请参阅以下代码:     results = [] enter code here     打开(" C:/ Users / Prateek / Desktop / TA Project / data1.csv")作为输入文件:         对于inputfile中的行:         results.append(line.strip()分割('&#39))

答案 5 :(得分:0)

有一个简单的方法,您可以在以下位置查看更多信息: Python CSV Docs

with open(filename, 'r') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
        for row in spamreader:
            data.append(row)

答案 6 :(得分:0)

尽管这是一个很老的问题,但只想分享我的建议。发现使用数据框中的熊猫读取csv和访问数据更容易。

import pandas

df = pandas.read_csv('<path/to/your/csv/file>')

print(df)
#OUTPUT
#     col1     col2                       col3  col4
#0   name1   empId1   241682-27638-USD-CIGGNT      1
#1   name2   empId2  241682-27638-USD-OCGGINT      1
#2   name3   empId3    241942-37190-USD-GGDIV      2
#3   name4   empId4    241942-37190-USD-CHYOF      1
#4   name5   empId5     241942-37190-USD-EQPL      1
#5   name6   empId6      241942-37190-USD-INT      1
#6   name7   empId7    242066-15343-USD-CYJOF      3
#7   name8   empId8    242066-15343-USD-CYJOF      3
#8   name9   empId9    242066-15343-USD-CYJOF      3
#9  name10  empId10    241942-37190-USD-GGDIV      2

#you can access any column using

df['col2']
#OUTPUT
#0     empId1
#1     empId2
#2     empId3
#3     empId4
#4     empId5
#5     empId6
#6     empId7
#7     empId8
#8     empId9
#9    empId10
#Name: col2, dtype: object


#Or print a specific value using
df['col2'][0]

答案 7 :(得分:0)

您还可以在不导入熊猫和csv的情况下读取csv数据

with open('testdata.csv', 'r') as f:
    results = []
    for line in f:
            words = line.split(',')
            results.append((words[0], words[1:]))
    print (results)