【问题标题】:How to read one single line of csv data in Python?如何在 Python 中读取一行 csv 数据?
【发布时间】:2013-06-20 04:18:33
【问题描述】:

有很多使用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 是什么?

标签: python file csv iterator next


【解决方案1】:

你可以只得到第一行:

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

【讨论】:

  • 可能,加"with open('csv_file', 'r')" as f: csv_reader = csv.reader(f) ..."
【解决方案2】:

要仅读取 csv 文件的第一行,请在阅读器对象上使用 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

【讨论】:

  • 如果您只想阅读第一行而不是迭代会发生什么?这种方法将迭代器移动到下一行,如果您想稍后再次迭代整个列表,您将丢失该值。
  • @MahsanNourani 文件指针可以移动到文件中的任何位置,例如file.seek(0) 会将其移回开头,然后您可以从头重新读取。您必须保持文件明显打开才能执行查找操作。一般来说,使用迭代器的目的是您一次只能得到一个项目,从而节省内存,如果您需要对同一数据进行多次迭代,列表是一种更好的数据结构。
  • 我只是想在对数据做任何事情之前打印文件的第一行,因此我的问题!这个解决方案很棒,我不知道。谢谢:)
【解决方案3】:

来自Python documentation

虽然该模块不直接支持解析字符串,但可以轻松完成:

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

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

【讨论】:

    【解决方案4】:

    您可以使用 Pandas 库从庞大的数据集中读取前几行。

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

    你可以在nrows参数中提到要读取的行数。

    【讨论】:

      【解决方案5】:

      获取 csv 文件中任意行的简单方法

      import csv
      csvfile = open('some.csv','rb')
      csvFileArray = []
      for row in csv.reader(csvfile, delimiter = '.'):
          csvFileArray.append(row)
      print(csvFileArray[0])
      

      【讨论】:

      • 要在 python3 中进行这项工作,只需删除 'rb' 中的 'b'
      • 这行得通,实际上没有delimiter='.'
      • 要回答发帖者的问题,只需在csvFileArray.append(row) 后添加break,它只会读取第一行。
      【解决方案6】:

      仅供参考,在获取第一行后可以使用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
      

      【讨论】:

        【解决方案7】:

        打印一系列行,在本例中是从第 4 行到第 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: 作为第一行来实现它
        猜你喜欢
        • 2021-03-26
        • 2013-10-11
        • 1970-01-01
        • 2013-02-06
        • 2015-10-23
        • 2015-01-10
        • 1970-01-01
        • 2021-06-01
        相关资源
        最近更新 更多