我有一个txt文件,如下所示:
24.03.2016 Peso
27.03.2016 Ruble
18.04.2016 Euro
17.05.2016 Dollar
16.06.2016 Frank
我需要将它拆分为不同的文件,新文件的名称应该是日期,以及此文件的填充 - 其余的。例如 - 名称 18.04.2016 ,文件内部为欧元。
但是如果它在同一个月(如03.2016这里),我需要将它全部放在一个文件中,其名称为本月的第一个日期。例如 - 名称 24.03.2016 ,里面是 Peso / n卢布。
我怎么能这样做?现在我只是逐行阅读我的文件的步骤:
with open("Data.txt", 'r', encoding="utf-8") as fp:
for line in fp:
read (line)
答案 0 :(得分:1)
这样的事情:
#!python3
import collections
seen = collections.defaultdict(list)
with open("Data.txt", 'r', encoding="utf-8") as fp:
for line in fp:
line = line.strip()
if not line:
continue
date,currency = line.split()
month = date[3:]
seen[month].append((date,currency))
for month in seen.keys():
with open(seen[month][0][0], 'w') as outfile:
print(file=outfile,
"\n".join(currency for date,currency in seen[month]))
答案 1 :(得分:1)
您可以将所有月份和相应数据(月份的第一个日期,货币列表)存储为字典中的键值对。然后,您可以将字典写入文件,其名称将基于月份的第一个日期和列表中剩余值的内容。
dict = {}
with open("Data.txt", 'r', encoding="utf-8") as fp:
for line in fp:
tokens = line.split()
date = tokens[0]
names = tokens[1:]
list_of_names = dict.get(date[3:], []) # get existing list of names or new list if key does not exist.
if not list_of_names:
list_of_names.append(date)
list_of_names.extend(names)
else:
list_of_names.extend(names)
dict[date[3:]] = list_of_names
for date, list_of_names in dict.iteritems():
with open(list_of_names[0] +'.txt', 'w') as f:
f.write('\n'.join(list_of_names[1:])) # write all names in one go
答案 2 :(得分:1)
您可以使用Python的groupby
函数对文件中匹配的月份和年份进行分组。 lambda函数使用split()
两次来提取月份和年份,首先将每行除以空格,然后取第一个条目并将其拆分为.
以获取3个日期组件,返回月份/年份。
然后,对于组中的每个条目,您可以根据该组中第一个条目的文件名创建一个文件,如下所示:
from itertools import groupby
with open('data.txt') as f_input:
for k, g in groupby(f_input, lambda x: x.split()[0].split('.')[1:]):
entries = list(g)
with open(entries[0].split()[0], 'w') as f_output:
for line in entries:
print line
f_output.write(line.split(' ', 1)[1].lstrip())
这将导致创建以下4个文件:
24.03.2016
18.04.2016
17.05.2016
16.06.2016
24.03.2016
文件例如包含:
Peso
Ruble
注意,这假设您在data.txt
中的条目按时间顺序排列。