鱼C论坛

 找回密码
 立即注册
查看: 1324|回复: 2

[已解决]获取文件名称列表只获取了一部分

[复制链接]
发表于 2020-8-24 09:19:02 | 显示全部楼层 |阅读模式

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

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

x
之前在站里获取了一份爬虫的代码,爬下来一部小说后尝试将其合并,然而合并的章节却是从1000章开始,前999章不知为何获取文件名列表里没有。
这是文件操作的哪里出了问题呢??
#合并一个文件夹下的多个txt文件
#coding=utf-8
import os
#获取目标文件夹的路径
filedir = os.getcwd()
#获取当前文件夹中的文件名称列表
filenames=os.listdir(filedir)
#打开当前目录下的result.txt文件,如果没有则创建
f=open('result.txt','w')
i=0
#先遍历文件名
for filename in filenames:
    print(filename)
    i+=1        
    print(i)
    if i>0:
        filepath = filedir+'\\'+filename
        print(filepath)
        #遍历单个文件,读取行数
        for line in open(filepath,encoding='gbk', errors='ignore'):
            # print(str(line))
            f.writelines(line)
            # f.write('\n')
#关闭文件



输出的结果如下(部分):合并,有问题.py
1
E:\新建文件夹\python练习\新建文件夹\合并,有问题.py
封推感言.txt
2
E:\新建文件夹\python练习\新建文件夹\封推感言.txt
更新通知!!!.txt
3
E:\新建文件夹\python练习\新建文件夹\更新通知!!!.txt
第1000章 雪心毒.txt
4
E:\新建文件夹\python练习\新建文件夹\第1000章 雪心毒.txt
第1001章 全部吞噬.txt
5
E:\新建文件夹\python练习\新建文件夹\第1001章 全部吞噬.txt
第1002章 悬空山十大天骄.txt
6
E:\新建文件夹\python练习\新建文件夹\第1002章 悬空山十大天骄.txt
第1003章 压制凌云空.txt
7
E:\新建文件夹\python练习\新建文件夹\第1003章 压制凌云空.txt
第1004章 初露实力.txt
8
E:\新建文件夹\python练习\新建文件夹\第1004章 初露实力.txt
第1005章 又一个天骄.txt
9
……
程序是能成功合并输出的,问题在于所有的txt文件都是同样地放在同一个文件夹下的,格式也是相同的,为何前999章不会被合并进来呢?
我尝试着在filenames=os.listdir(filedir)之后print了filenames,发现这里面确实和合并顺序一样,没有前999章。
最佳答案
2020-8-24 09:28:21

因为你 open 使用的是 w ,导致是新建个空白文件覆盖了原先的文件内容

你如果要追加写入应该将 open 的模式改成 a

参考代码:
#合并一个文件夹下的多个txt文件
#coding=utf-8
import os
#获取目标文件夹的路径
filedir = os.getcwd()
#获取当前文件夹中的文件名称列表
filenames=os.listdir(filedir)
#打开当前目录下的result.txt文件,如果没有则创建
f=open('result.txt','a')
i=0
#先遍历文件名
for filename in filenames:
    print(filename)
    i+=1        
    print(i)
    if i>0:
        filepath = filedir+'\\'+filename
        print(filepath)
        #遍历单个文件,读取行数
        for line in open(filepath,encoding='gbk', errors='ignore'):
            # print(str(line))
            f.writelines(line)
            # f.write('\n')
#关闭文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-24 09:28:21 | 显示全部楼层    本楼为最佳答案   

因为你 open 使用的是 w ,导致是新建个空白文件覆盖了原先的文件内容

你如果要追加写入应该将 open 的模式改成 a

参考代码:
#合并一个文件夹下的多个txt文件
#coding=utf-8
import os
#获取目标文件夹的路径
filedir = os.getcwd()
#获取当前文件夹中的文件名称列表
filenames=os.listdir(filedir)
#打开当前目录下的result.txt文件,如果没有则创建
f=open('result.txt','a')
i=0
#先遍历文件名
for filename in filenames:
    print(filename)
    i+=1        
    print(i)
    if i>0:
        filepath = filedir+'\\'+filename
        print(filepath)
        #遍历单个文件,读取行数
        for line in open(filepath,encoding='gbk', errors='ignore'):
            # print(str(line))
            f.writelines(line)
            # f.write('\n')
#关闭文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-24 09:32:43 | 显示全部楼层
Twilight6 发表于 2020-8-24 09:28
因为你 open 使用的是 w ,导致是新建个空白文件覆盖了原先的文件内容

你如果要追加写入应该将 open  ...

不是的,解决了,是、排序的问题,文件第1000章这些比第1章排序要前。解决方法 用一个natsort排序再输出就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 03:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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