将多个txt中的文件读写到一个TXT文件中

闲来无事写点小程序自己乐呵乐呵~~~~奋斗

背景:

    笔者去年暑假的时候为了督促自己学习,养成了使用TXT文件来记录每天的点滴,目的是提醒自己一直在努力,不要迷茫。但是暑假结束后,想要看看这个暑假自己一共做了啥,因此就想到了写一个小程序将这些日记都读到一个文件里面去,方便直观查看。

     为此,首先要解决的是——使用实现读取目录所有文件的文件名并保存到txt文件代码。通过查阅资料并总结有两种方法:

方法一:使用os.listdir

import os
def ListFilesToTxt(dir,file,wildcard,recursion):
    exts = wildcard.split(" ")
    files = os.listdir(dir)
    for name in files:
        fullname=os.path.join(dir,name)
        if(os.path.isdir(fullname) & recursion):
            ListFilesToTxt(fullname,file,wildcard,recursion)
        else:
            for ext in exts:
                if(name.endswith(ext)):
                    file.write(name + "\n")
                    break
def Test():
  dir="C:/Users/zhuwenjing/Desktop/dairy/2_summerVacation"
  outfile="binaries.txt"
  wildcard = ".txt .exe .dll .lib"

  file = open(outfile,"w")
  if not file:
    print ("cannot open the file %s for writing" % outfile)
  ListFilesToTxt(dir,file,wildcard, 1)
  file.close()

Test()
dir = "C:/Users/zhuwenjing/Desktop/dairy/2_summerVacation"
print os.listdir(dir)

方法2:使用os.walk

# 使用os.walk递归地对目录及子目录处理,每次返回的三项分别为:当前递归的目录,当前递归的目录下的所有子目录,

# 当前递归的目录下的所有文件。
import os
def ListFilesToTxt(dir,file,wildcard,recursion): #recursion控制递归深度,只递归当前目录(*****)
    exts = wildcard.split(" ")
    for root, subdirs, files in os.walk(dir):
        for name in files:
            for ext in exts:
                if(name.endswith(ext)): # (*****)
                    file.write(name + "\n")
                    break
        if(not recursion):
            break
def Test():
  dir=r"C:/Users/zhuwenjing/Desktop/dairy/2_summerVacation"
  outfile="binaries.txt"
  wildcard = ".txt .exe .dll .lib"

  file = open(outfile,"w")
  if not file:
    print ("cannot open the file %s for writing" % outfile)
  ListFilesToTxt(dir,file,wildcard, 0)

  file.close()
Test()


以下是实现上面需求的小程序的代码:

1 将以天为单位记录的日记进行合并

将一个文件夹下的所有txt日记写到一个文件中

目标格式是:一行存储一天的日记

# -*- coding:utf-8 -*-
# 文件格式是:
# 20170711.txt
# 20170715.txt
# 20170717.txt

第一步:

import glob
import re
# 采用glob模块匹配出目标文件夹下的所有txt后缀名的文件
txt_filenames = glob.glob(r'C:\Users\zhuwenjing\Desktop\Diary\a\*.txt')
print( txt_filenames)

输出的结果是:

['C:\\Users\\zhuwenjing\\Desktop\\Diary\\a\\20170711.txt','C:\\Users\\zhuwenjing\\Desktop\\Diary\\a\\20170715.txt', 'C:\\Users\\zhuwenjing\\Desktop\\Diary\\a\\20170717.txt', 'C:\\Users\\zhuwenjing\\Desktop\\Diary\\a\\20170718.txt', 'C:\\Users\\zhuwenjing\\Desktop\\Diary\\a\\20170719.txt', 'C:\\Users\\zhuwenjing\\Desktop\\Diary\\a\\20170720.txt']

第二步:

# 采用re模块匹配出txt文件的文件名称
pattern = re.compile("a\\\(.*?)\.txt", re.S)
txtname = []
for i in txt_filenames:
    name = re.findall(pattern, i )
    txtname.append(name[0])
print(txtname)
输出的结果是:

['20170711', '20170715', '20170717', '20170718', '20170719', '20170720']

第三步:

# 将每个txt文件中的信息放在一行中,并存储到目标文件中
fileout = open(r'C:\Users\zhuwenjing\Desktop\Diary\AllDiary.txt','w+') # 注意:AllDiary.txt需要是已经创建过的文件
for i in range(len(txt_filenames)):
    txt_file = open(txt_filenames[i], 'r') # 可以转码成txt_filenames[i].decode('utf-8'),也可以不转码
    buf = txt_file.read()  # the context of txt file saved to buf
    content = buf.replace("\n", " ").strip()
    p = txtname[i] + ' ' + content
    fileout.write(p)
    fileout.write('\n\n')
    txt_file.close()
fileout.close()


2 将以周为单位记录的日记进行合并

目标:将一个文件夹下的所有txt日记写到一个文件中(一行是一周的日记)
# 文件格式是:======================>    目标格式:
# 第1周周报20170226.txt               [1, 20170226]
# 第2周工作计划.txt                        [2]
# 第2周周报20170305.txt               [2, 20170305]
# 第3周工作计划.txt                        [3]

第一步:

import glob
import re
# 采用glob模块匹配出目标文件夹下的所有txt后缀名的文件
txt_filenames = glob.glob(r'C:\Users\zhuwenjing\Desktop\Diary\b\*.txt')
print( txt_filenames)

第二步:

# 采用re模块匹配出txt文件的文件名中的数字
pattern = re.compile("[0-9]+", re.S)
txtname = []
for i in txt_filenames:
    name = re.findall(pattern, i )
    name = map(int, name) # 将列表中的数据类型转成数值型
    txtname.append(name)

第三步:

# 将文件名和列表中的日期信息进行对应匹配,目的是方便按照日期写入顺序排序
pp = zip(txtname,txt_filenames)
pp = sorted(pp)

第四步:

# 将每个txt文件中的信息放在一行中,并存储到目标文件中
fileout = open(r'C:\Users\zhuwenjing\Desktop\Diary\AllDiary1.txt','w+')
for i in range(len(pp)):
    txt_file = open(pp[i][1], 'r') # 注意:这里直接读取文件名即可,不需要解码成utf-8的格式txt_filenames[i].decode('utf-8')
    buf = txt_file.read()  # the context of txt file saved to buf
    content = buf.replace("\n", " ").strip()
    p = str(pp[i][0]) + ' ' + content # 每行开始加上日期数据
    fileout.write(p)
    fileout.write('\n\n')
    txt_file.close()
fileout.close()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值