用python中的readlines和split函数解析文件
我有一些文件要解析。我想在每行上打印出生日期。下面的代码只返回第一行。我不想使用readlines,因为我的一些文件非常大用python中的readlines和split函数解析文件,python,parsing,readline,Python,Parsing,Readline,我有一些文件要解析。我想在每行上打印出生日期。下面的代码只返回第一行。我不想使用readlines,因为我的一些文件非常大 HEADER: Date_of_birth, ID, First_Name, Last_Name 1/1/1970, 1, John, Smith 12/31/1969, 2, Peter, Smith 对不起,我错了 检查这个 dates = [] with open("test.csv") as f: for row in f: dates.a
HEADER: Date_of_birth, ID, First_Name, Last_Name
1/1/1970, 1, John, Smith
12/31/1969, 2, Peter, Smith
对不起,我错了
检查这个
dates = []
with open("test.csv") as f:
for row in f:
dates.append(row.split()[0])
使用模块
如果第一行实际上不包含您显示为
标题的内容,即出生日期、ID、名字、姓氏
,则:
import csv
with open("test.csv", "r", newline='') as f:
fieldnames = ['Date_of_birth', 'ID', 'First_Name', 'Last_Name']
rdr = csv.DictReader(f, fieldnames=fieldnames)
for row in rdr:
date_of_birth = row['Date_of_birth']
print(date_of_birth)
否则:
import csv
with open("test.csv", "r", newline='') as f:
rdr = csv.DictReader(f)
for row in rdr:
date_of_birth = row['Date_of_birth']
print(date_of_birth)
如果文件的第一行实际包含标题:出生日期、ID、名字、姓氏
,则必须使用第一个备选代码,但添加逻辑以跳过第一行
如果你再清楚10%,我的答案会短60%。readline
函数一次只返回一行,因此你必须使用while循环来读取这些行:
with open("test.csv", "r") as f:
dates = []
while True:
line = f.readline()
if not line: # if line is blank, there are no more lines
break # stop the loop
dates.append(line.split()[0])
我建议使用
csv
模块,尽管您的文件格式有点奇怪,因为它以标题开头:“
后面是您关心的实际标题。可能只是读入最初的8个字节,验证它们是否确实包含字符串“HEADER:”
,否则就放弃它们,然后将打开的文件句柄传递给csv
,以解析文件的其余部分
import csv
with open('test.csv') as f:
start_bytes = f.read(8)
assert(start_bytes == 'HEADER: ')
c = csv.DictReader(f)
for row in c:
print(row['Date_of_birth'])
下面是一个简单的示例,您可能希望对其进行调整,以更优雅地处理任何错误:
import csv
with open('test.csv') as f:
start_bytes = f.read(8)
assert(start_bytes == 'HEADER: ')
c = csv.reader(f)
header_row = next(c)
column_number = header_row.index('Date_of_birth')
for row in c:
print(row[column_number])
更新:感谢另一位撰稿人建议csv.DictReader
。类似地,您似乎可以使用一个位于某个非零偏移量的file对象来实例化它,以丢弃从文件开头开始包含“HEADER:”
的初始字节
import csv
with open('test.csv') as f:
start_bytes = f.read(8)
assert(start_bytes == 'HEADER: ')
c = csv.DictReader(f)
for row in c:
print(row['Date_of_birth'])
“我不想使用readlines,因为我的一些文件非常大。”但您确实想读取整个文件内容,并在终端上显示所有内容?单词“HEADER:”是否确实出现在第一行?
import csv
with open('test.csv') as f:
start_bytes = f.read(8)
assert(start_bytes == 'HEADER: ')
c = csv.DictReader(f)
for row in c:
print(row['Date_of_birth'])