用python中的readlines和split函数解析文件

用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

我有一些文件要解析。我想在每行上打印出生日期。下面的代码只返回第一行。我不想使用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.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'])