我有一个包含多个日期的文本文件。在每行的开头(标题之后)按时间顺序排序的日期,如:
2013-10-20, text
2013-10-21, text
2013-10-22, text
2013-10-23, text
我想得到“2013-10-20”和“2013-10-23”。
我有一堆不同日期的文件。
谢谢!
答案 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'):]