鱼C论坛

 找回密码
 立即注册
查看: 1427|回复: 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
import os,subprocess
import datetime

def Check_filetime(file_name):
    try:
        file_time = file_name.split('-')[0]
        file_time = datetime.date(int(file_time[0:4]), int(file_time[4:6]), int(file_time[6:8]))
        #print(file_time)
        now_date = datetime.datetime.today()
        now_date = datetime.date(now_date.year, now_date.month, now_date.day)
        #print(now_date)
        delta = now_date - file_time
        if delta.days < 30:
            return True
        else:
            return False
    except:
        return False


file_path = r'D:\python\test\1'
file_names = os.listdir(file_path)
print(file_names)
copy_list=[file_name for file_name in file_names if Check_filetime(file_name)==True]
copy_str=''
for i in copy_list:
    copy_str=copy_str+'+'+i
#print(copy_str[1:])
shell_str = f'copy/b {file_path}+\{copy_str[1:]} ' + file_path+'\合并后的文件.txt'
print(shell_str)
subprocess.call(shell_str, shell=True)  # 调用cmd合并所有ts文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-14 09:30:32 From FishC Mobile | 显示全部楼层
我发过一个帖子,就是这个txt合并的,可以看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

def Check_filetime(file_name):
    try:
        file_time = file_name.split('-')[0]
        file_time = datetime.date(int(file_time[0:4]), int(file_time[4:6]), int(file_time[6:8]))
        #print(file_time)
        now_date = datetime.datetime.today()
        now_date = datetime.date(now_date.year, now_date.month, now_date.day)
        #print(now_date)
        delta = now_date - file_time
        if delta.days < 30:
            return True
        else:
            return False
    except:
        return False


file_path = r'D:\python\test\1'
file_names = os.listdir(file_path)
print(file_names)
copy_list=[file_name for file_name in file_names if Check_filetime(file_name)==True]
copy_str=''
for i in copy_list:
    copy_str=copy_str+'+'+i
#print(copy_str[1:])
shell_str = f'copy/b {file_path}+\{copy_str[1:]} ' + file_path+'\合并后的文件.txt'
print(shell_str)
subprocess.call(shell_str, shell=True)  # 调用cmd合并所有ts文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

        with open(datapath,'r') as f:
            lines=f.readlines()
            text.append(lines)
    print(text)
    savepath = os.path.join(file_path,'all.txt' )
    print(savepath)
    with open(savepath,'w') as f1:
        for i in text:
            f1.write(str(i)+'\n')
copytxt(copy_list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

路径拼接错了,改成这样可以了
copy_list=[f'{file_path}\\{file_name}' for file_name in file_names if Check_filetime(file_name)==True]
copy_str=''
for i in copy_list:
    copy_str=copy_str+'+'+i
#print(copy_str[1:])
shell_str = f'copy/b {copy_str[1:]} ' + file_path+r'\all.txt'
print(shell_str)
subprocess.call(shell_str, shell=True)  # 调用cmd合并所有ts文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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