在Python中将一个txt拆分为多个具有特定名称的txt文件

时间:2016-04-24 22:12:42

标签: python

我有一个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)

3 个答案:

答案 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中的条目按时间顺序排列。