如何获取文件中的第一个和最后一个日期

时间:2013-12-05 07:55:11

标签: python

我有一个包含多个日期的文本文件。在每行的开头(标题之后)按时间顺序排序的日期,如:

2013-10-20, text
2013-10-21, text
2013-10-22, text
2013-10-23, text

我想得到“2013-10-20”和“2013-10-23”。

我有一堆不同日期的文件。

谢谢!

5 个答案:

答案 0 :(得分:1)

获取文件中第一行和最后一行的一种简单方法是将所有文件读取到list并获取第一个和最后一个项目。

with open('youFile.txt','r') as fp:
    linesList = fp.readlines()
    # get the first
    first = linesList[0]
    # get the last
    last = linesList[-1]

答案 1 :(得分:1)

您可以从以下代码中获取第一行和最后一行。

 with open(yourfile, "r") as f:
        first = f.readline()     
        f.seek(-2, 2)            
        while f.read(1) != "\n": 
            f.seek(-2, 1)        
        last = f.readline()      

如果您只想获取日期,可以使用正则表达式,也可以只使用以下内容。

first = first.split(',')[0]
last = last.split(',')[0]

答案 2 :(得分:0)

不是那么简单的替代

    f = open('filepath','r')
    //f.seek(0)
    import string
    a = string.split(f.read(),'\n')
    firstdate=string.split(a[0],',')[0]
    lastdate=string.split(a[len(a)-1],',')[0]

答案 3 :(得分:0)

这是一个很好的简单方法。

import sys

def extract_date(line):
    date, _, _ = line.partition(',')
    return date.strip()


_, fname = sys.argv

with open(fname, "rt") as f:
    line = next(f)
    first_date = extract_date(line)
    for line in f:
        pass
    last_date = extract_date(line)


print("first: {}  last: {}".format(first_date, last_date))

您可以对任何迭代器使用相同的技术...使用next()获取第一个值,然后继续从迭代器获取值,直到它耗尽。

答案 4 :(得分:0)

你可以打开文件并使用csv.reader,取第一行或默认为空列表,然后使用deque来消耗文件的其余部分,每次保留一行,然后取出再次排第一行:

from collections import deque
import csv

with open('input') as fin:
    csvin = csv.reader(fin)
    first = next(csvin, [])
    last = next(iter(deque(csvin, 1)), first)

print first[0], last[0] # assuming date is field column

或者,使用mmap'd文件:

import mmap

with open('input') as fin:
    mf = mmap.mmap(fin.fileno(), 0, access=mmap.ACCESS_READ)
    first = mf.readline()
    last = mf[mf.rfind('\n'):]