鱼C论坛

 找回密码
 立即注册
查看: 1708|回复: 5

[已解决]合并一个文件夹内文件的问题

[复制链接]
发表于 2020-9-14 09:27:03 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个文件夹内有很多个txt文件。
Txt文件的命名规则是日期-1,比如今天得第一个20200914-1,第二个20200914-2以此类推。
每天会有几个文件不等。

现在想解决的问题逻辑是,如何快速的找到近30天内的文件。再然后进行批量合并

我的想法是先拿到文件的名字,然后取出时间。
再和今天日期对比,在时间范围,就进行合并,不知道这样循环会不会太影响效率,各位有啥好的建议么?
最佳答案
2020-9-14 10:48:14
  1. import os,subprocess
  2. import datetime

  3. def Check_filetime(file_name):
  4.     try:
  5.         file_time = file_name.split('-')[0]
  6.         file_time = datetime.date(int(file_time[0:4]), int(file_time[4:6]), int(file_time[6:8]))
  7.         #print(file_time)
  8.         now_date = datetime.datetime.today()
  9.         now_date = datetime.date(now_date.year, now_date.month, now_date.day)
  10.         #print(now_date)
  11.         delta = now_date - file_time
  12.         if delta.days < 30:
  13.             return True
  14.         else:
  15.             return False
  16.     except:
  17.         return False


  18. file_path = r'D:\python\test\1'
  19. file_names = os.listdir(file_path)
  20. print(file_names)
  21. copy_list=[file_name for file_name in file_names if Check_filetime(file_name)==True]
  22. copy_str=''
  23. for i in copy_list:
  24.     copy_str=copy_str+'+'+i
  25. #print(copy_str[1:])
  26. shell_str = f'copy/b {file_path}+\{copy_str[1:]} ' + file_path+'\合并后的文件.txt'
  27. print(shell_str)
  28. subprocess.call(shell_str, shell=True)  # 调用cmd合并所有ts文件
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-14 09:30:32 From FishC Mobile | 显示全部楼层
我发过一个帖子,就是这个txt合并的,可以看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-14 09:47:13 | 显示全部楼层
就是这个-小说章节合并,可参考或优化
https://fishc.com.cn/thread-179322-1-1.html
(出处: 鱼C论坛)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-14 10:48:14 | 显示全部楼层    本楼为最佳答案   
  1. import os,subprocess
  2. import datetime

  3. def Check_filetime(file_name):
  4.     try:
  5.         file_time = file_name.split('-')[0]
  6.         file_time = datetime.date(int(file_time[0:4]), int(file_time[4:6]), int(file_time[6:8]))
  7.         #print(file_time)
  8.         now_date = datetime.datetime.today()
  9.         now_date = datetime.date(now_date.year, now_date.month, now_date.day)
  10.         #print(now_date)
  11.         delta = now_date - file_time
  12.         if delta.days < 30:
  13.             return True
  14.         else:
  15.             return False
  16.     except:
  17.         return False


  18. file_path = r'D:\python\test\1'
  19. file_names = os.listdir(file_path)
  20. print(file_names)
  21. copy_list=[file_name for file_name in file_names if Check_filetime(file_name)==True]
  22. copy_str=''
  23. for i in copy_list:
  24.     copy_str=copy_str+'+'+i
  25. #print(copy_str[1:])
  26. shell_str = f'copy/b {file_path}+\{copy_str[1:]} ' + file_path+'\合并后的文件.txt'
  27. print(shell_str)
  28. subprocess.call(shell_str, shell=True)  # 调用cmd合并所有ts文件
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-14 14:28:51 | 显示全部楼层

最后一行的调用貌似有点问题,测试后,合并的是文件内所有文件。
因为层主第24行给出来的copy_list是筛选好的列表,我重新定义了一个函数,来循环读他拿到内容,后边在去写就可以了。
  1. def copytxt(path):
  2.     text = []
  3.     for i in range(len(path)):
  4.         datapath = os.path.join(file_path,path[i] )
  5.         print(datapath)

  6.         with open(datapath,'r') as f:
  7.             lines=f.readlines()
  8.             text.append(lines)
  9.     print(text)
  10.     savepath = os.path.join(file_path,'all.txt' )
  11.     print(savepath)
  12.     with open(savepath,'w') as f1:
  13.         for i in text:
  14.             f1.write(str(i)+'\n')
  15. copytxt(copy_list)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-14 14:44:22 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-14 14:51 编辑

路径拼接错了,改成这样可以了

  1. copy_list=[f'{file_path}\\{file_name}' for file_name in file_names if Check_filetime(file_name)==True]
  2. copy_str=''
  3. for i in copy_list:
  4.     copy_str=copy_str+'+'+i
  5. #print(copy_str[1:])
  6. shell_str = f'copy/b {copy_str[1:]} ' + file_path+r'\all.txt'
  7. print(shell_str)
  8. subprocess.call(shell_str, shell=True)  # 调用cmd合并所有ts文件
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-27 05:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表