如何在Python中读取单行csv数据?

127

有很多使用Python读取CSV数据的例子,就像这个:

import csv
with open('some.csv', newline='') as f:
  reader = csv.reader(f)
  for row in reader:
    print(row)

我只想读取一行数据并将其输入到各种变量中。我该怎么做?我已经到处寻找可用的示例。

我的代码只检索i的值,而没有其他任何值。

reader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in reader:
  i = int(row[0])
  a1 = int(row[1])
  b1 = int(row[2])
  c1 = int(row[2])
  x1 = int(row[2])
  y1 = int(row[2])
  z1 = int(row[2])

你的 CSV 结构是什么样子的?当你遍历读取器时,row 是什么? - dm03514
9个回答

172

要仅读取csv文件的第一行,请在reader对象上使用next()

with open('some.csv', newline='') as f:
  reader = csv.reader(f)
  row1 = next(reader)  # gets the first line
  # now do something here 
  # if first row is the header, then you can do one more next() to get the next row:
  # row2 = next(f)
或者:
with open('some.csv', newline='') as f:
  reader = csv.reader(f)
  for row in reader:
    # do something here with `row`
    break

2
如果您只想读取第一行而不是迭代,会发生什么情况?这个方法会将迭代器移动到下一行,如果以后要再次遍历整个列表,则会丢失该值。 - Mahsan Nourani
3
文件指针可以移动到文件中的任何位置,例如file.seek(0)会将其移回到开头,然后您可以重新从开头读取。显然,您需要保持文件处于打开状态以执行寻找操作。通常使用迭代器的目的是一次获取一个项目,因此节省内存。如果需要对相同数据进行多次迭代,则列表是更好的数据结构。 - Ashwini Chaudhary
我只是想在处理数据之前打印文件的第一行,这就是我的问题所在!这个解决方案很棒,我不知道。谢谢 :) - Mahsan Nourani

46

你可以只获取第一行,例如:

with open('some.csv', newline='') as f:
  csv_reader = csv.reader(f)
  csv_headings = next(csv_reader)
  first_line = next(csv_reader)

2
可能最好加上 "with open('csv_file', 'r')" 作为 f: csv_reader = csv.reader(f) ... - Sanchit

30
你可以使用Pandas库来从大型数据集中读取前几行数据。
import pandas as pd

data = pd.read_csv("names.csv", nrows=1)

您可以在nrows参数中提及要读取的行数。


19

只是作为参考,可以在获取第一行后使用 for 循环来获取文件的其余部分:

with open('file.csv', newline='') as f:
    reader = csv.reader(f)
    row1 = next(reader)  # gets the first line
    for row in reader:
        print(row)       # prints rows 2 and onward

17

以下内容来自Python文档:

虽然该模块不直接支持解析字符串,但这可以很容易地完成:

import csv
for row in csv.reader(['one,two,three']):
    print row

将字符串数据放入单例列表中即可。


8
获取CSV文件中任意一行的简单方法
import csv
csvfile = open('some.csv','rb')
csvFileArray = []
for row in csv.reader(csvfile, delimiter = '.'):
    csvFileArray.append(row)
print(csvFileArray[0])

3
要在Python3中使它工作,只需从'rb'中删除'b'。 - Ricky Avina
1
这只需要运行,实际上不需要 delimiter='.' - suvtfopw
1
回答发帖者的问题,只需在 csvFileArray.append(row) 后添加一个 break,它将只读取第一行。 - StratusBase LLC

6

To print a range of line, in this case from line 4 to 7

import csv

with open('california_housing_test.csv') as csv_file:
    data = csv.reader(csv_file)
    for row in list(data)[4:7]:
        print(row)

我只能通过使用with open('C:\\Users\\username\\Desktop\\csv_file.csv', encoding='utf-8') as csv_file:作为第一行来使其工作。 - jeppoo1

1

我认为最简单的方法是最好的方法,在这种情况下(以及大多数其他情况下),最好不要使用外部库(pandas)或模块(csv)。因此,这里是简单的答案。

""" no need to give any mode, keep it simple """
with open('some.csv') as f:
    """ store in a variable to be used later """
    my_line = f.nextline()
    """ do what you like with 'my_line' now """

-1

对于Python3,请使用: my_line = next(f)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接