ฉันจะข้ามแถวส่วนหัวและเริ่มอ่านไฟล์จาก line2 ได้อย่างไร
ฉันจะข้ามแถวส่วนหัวและเริ่มอ่านไฟล์จาก line2 ได้อย่างไร
คำตอบ:
with open(fname) as f:
next(f)
for line in f:
#do something
header_line = next(f)
หรือการใช้งาน
f = open(fname,'r')
lines = f.readlines()[1:]
f.close()
['a', 'b', 'c'][1:]
=>['b', 'c']
consume()
จากmore-itertools
ที่ระบุไว้ในdocs.python.org/3/library/itertools.html#itertools-recipes ? ฉันได้ยินเกี่ยวกับเรื่องนี้ในstackoverflow.com/questions/11113803
หากคุณต้องการบรรทัดแรกแล้วคุณต้องการดำเนินการบางอย่างกับไฟล์รหัสนี้จะเป็นประโยชน์
with open(filename , 'r') as f:
first_line = f.readline()
for line in f:
# Perform some operations
หากการแบ่งสามารถทำงานกับตัววนซ้ำ ...
from itertools import islice
with open(fname) as f:
for line in islice(f, 1, None):
pass
f = open(fname).readlines()
firstLine = f.pop(0) #removes the first line
for line in f:
...
เพื่อสรุปงานของการอ่านหลายบรรทัดส่วนหัวและเพื่อปรับปรุงการอ่านฉันจะใช้วิธีการแยก สมมติว่าคุณต้องการโทเค็นสามบรรทัดแรกcoordinates.txt
เพื่อใช้เป็นข้อมูลส่วนหัว
ตัวอย่าง
coordinates.txt
---------------
Name,Longitude,Latitude,Elevation, Comments
String, Decimal Deg., Decimal Deg., Meters, String
Euler's Town,7.58857,47.559537,0, "Blah"
Faneuil Hall,-71.054773,42.360217,0
Yellowstone National Park,-110.588455,44.427963,0
จากนั้นวิธีการแยกช่วยให้คุณระบุสิ่งที่คุณต้องการจะทำกับข้อมูลส่วนหัว (ในตัวอย่างนี้เราเพียง tokenize บรรทัดส่วนหัวตามเครื่องหมายจุลภาคและส่งกลับเป็นรายการ แต่มีห้องที่จะทำมากขึ้น)
def __readheader(filehandle, numberheaderlines=1):
"""Reads the specified number of lines and returns the comma-delimited
strings on each line as a list"""
for _ in range(numberheaderlines):
yield map(str.strip, filehandle.readline().strip().split(','))
with open('coordinates.txt', 'r') as rh:
# Single header line
#print next(__readheader(rh))
# Multiple header lines
for headerline in __readheader(rh, numberheaderlines=2):
print headerline # Or do other stuff with headerline tokens
เอาท์พุต
['Name', 'Longitude', 'Latitude', 'Elevation', 'Comments']
['String', 'Decimal Deg.', 'Decimal Deg.', 'Meters', 'String']
หากcoordinates.txt
มี headerline numberheaderlines
อีกเพียงแค่เปลี่ยน เหนือสิ่งอื่นใดมันชัดเจนว่า__readheader(rh, numberheaderlines=2)
กำลังทำอะไรอยู่และเราหลีกเลี่ยงความคลุมเครือในการคิดหรือแสดงความคิดเห็นว่าทำไมผู้เขียนคำตอบที่ยอมรับใช้next()
ในรหัสของเขา
หากคุณต้องการอ่านไฟล์ CSV หลายไฟล์ที่เริ่มต้นจากบรรทัดที่ 2 จะใช้งานได้อย่างมีเสน่ห์
for files in csv_file_list:
with open(files, 'r') as r:
next(r) #skip headers
rr = csv.reader(r)
for row in rr:
#do something
(นี่เป็นส่วนหนึ่งของคำตอบของ Parfaitสำหรับคำถามอื่น)
# Open a connection to the file
with open('world_dev_ind.csv') as file:
# Skip the column names
file.readline()
# Initialize an empty dictionary: counts_dict
counts_dict = {}
# Process only the first 1000 rows
for j in range(0, 1000):
# Split the current line into a list: line
line = file.readline().split(',')
# Get the value for the first column: first_col
first_col = line[0]
# If the column value is in the dict, increment its value
if first_col in counts_dict.keys():
counts_dict[first_col] += 1
# Else, add to the dict and set value to 1
else:
counts_dict[first_col] = 1
# Print the resulting dictionary
print(counts_dict)
next(f)
ใช้f.readline()
และเก็บไว้เป็นตัวแปร