จะอ่านข้อมูล csv หนึ่งบรรทัดใน Python ได้อย่างไร


94

มีตัวอย่างมากมายของการอ่านข้อมูล csv โดยใช้ python เช่นนี้:

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

คำตอบ:


145

หากต้องการอ่านเฉพาะแถวแรกของไฟล์ 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

38

คุณจะได้แค่แถวแรกเช่น:

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

23

คุณใช้ไลบรารี Pandas เพื่ออ่านสองสามบรรทัดแรกจากชุดข้อมูลขนาดใหญ่ได้

import pandas as pd

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

คุณสามารถระบุจำนวนบรรทัดที่จะอ่านได้ในพารามิเตอร์ nrows


14

จากเอกสาร 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 เพียงแค่ลบ 'b' ใน 'rb'
Ricky Avina

1
สิ่งนี้ใช้งานได้จริงโดยไม่ต้องใช้ไฟล์delimiter='.'.
suvtfopw

1
ในการตอบคำถามของผู้โพสต์เพียงแค่ใส่breakหลังcsvFileArray.append(row)และมันจะอ่านบรรทัดแรกเท่านั้น
StratusBase LLC

5

สำหรับการอ้างอิง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

3

ในการพิมพ์ช่วงของบรรทัดในกรณีนี้คือตั้งแต่บรรทัดที่ 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.