Python搜索文件最早的日期

时间:2015-03-25 04:27:45

标签: python file

我试图设计一个基本上将文件变量作为参数的函数,并返回一个列表,其中包含文件中最早的帐户日期的客户数据。

假设这是文件(txt文件)的内容:

12345,Tom,Black,300.00,1998-01-30
23456,Alice,Smith,1200.50,1998-02-20
14567,Jane,White,900.00,1998-07-01
43564,Weilin,Zhao,450.25,1998-01-03
45432,Bina,Mehta,278.95,1998-03-21

我的代码是:

l = open(r'C:\Users\John\Downloads\customers.txt','r', encoding="utf-8")

contents= l.readlines()

def get_earliest_customer(contents):

    with open(r'C:\Users\John\Downloads\customers.txt','r', encoding="utf-8") as f:
        print(min(f, key=(lambda l: string(l.strip().split(",")[4]))))

l.close()

get_earliest_customer(contents)

哪个课程给了我更多的信息:

  print(min(f, key=(lambda l: string(l.strip().split(",")[4]))))
  File "C:\Users\John\Home\HPcomputers\src\4.py", line 10, in <lambda>
    print(min(f, key=(lambda l: str(l.strip().split(",")[4]))))
NameError: name 'string' is not defined

对于解决这个问题,建议/意见表示赞赏,我已经指定了我想要搜索的点是[4],因为每行的日期都在那里。

3 个答案:

答案 0 :(得分:1)

l = open(r'C:\Users\John\Downloads\customers.txt','r', encoding="utf-8")

contents= l.readlines()

def get_earliest_customer(contents):

    with open(r'C:\Users\John\Downloads\customers.txt','r', encoding="utf-8") as f:
        print(min(f, key=(lambda l: str(l.strip().split(",")[4]))))

l.close()

get_earliest_customer(contents)

给出输出:

43564,Weilin,Zhao,450.25,1998-01-03

这就是我想要的,因此从字符串到str的变化,虽然微小的变化提供了我想要的输出。

答案 1 :(得分:1)

试试这个:

file1 = open('data.txt', 'r')

print min([line for line in file1.read().splitlines()], key=lambda x: x.rsplit(',', 1)[1])

输出:

43564,Weilin,Zhao,450.25,1998-01-03

答案 2 :(得分:1)

更好的方法是将日期字符串转换为日期对象,然后进行比较。

我也不知道您为什么要两次阅读该文件,即使将其传递给您的函数,也不会使用contents变量。

import datetime
import csv

fmt = '%Y-%m-%d'

def get_earliest_customer(filename):
     contents = []
     with open(filename) as f:
         reader = csv.reader(contents, delimiter=',')
         for row in reader:
             contents = row[:-1]+[datetime.datetime.strptime(row[-1], fmt)]

     return min(contents, key=lambda x: x[-1])

print(get_earliest_customer(r'C:\Users\John\Downloads\customers.txt'))