鱼C论坛

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

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

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

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

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

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

复制代码




输出的结果如下(部分):合并,有问题.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

参考代码:
  1. #合并一个文件夹下的多个txt文件
  2. #coding=utf-8
  3. import os
  4. #获取目标文件夹的路径
  5. filedir = os.getcwd()
  6. #获取当前文件夹中的文件名称列表
  7. filenames=os.listdir(filedir)
  8. #打开当前目录下的result.txt文件,如果没有则创建
  9. f=open('result.txt','a')
  10. i=0
  11. #先遍历文件名
  12. for filename in filenames:
  13.     print(filename)
  14.     i+=1        
  15.     print(i)
  16.     if i>0:
  17.         filepath = filedir+'\\'+filename
  18.         print(filepath)
  19.         #遍历单个文件,读取行数
  20.         for line in open(filepath,encoding='gbk', errors='ignore'):
  21.             # print(str(line))
  22.             f.writelines(line)
  23.             # f.write('\n')
  24. #关闭文件

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

参考代码:
  1. #合并一个文件夹下的多个txt文件
  2. #coding=utf-8
  3. import os
  4. #获取目标文件夹的路径
  5. filedir = os.getcwd()
  6. #获取当前文件夹中的文件名称列表
  7. filenames=os.listdir(filedir)
  8. #打开当前目录下的result.txt文件,如果没有则创建
  9. f=open('result.txt','a')
  10. i=0
  11. #先遍历文件名
  12. for filename in filenames:
  13.     print(filename)
  14.     i+=1        
  15.     print(i)
  16.     if i>0:
  17.         filepath = filedir+'\\'+filename
  18.         print(filepath)
  19.         #遍历单个文件,读取行数
  20.         for line in open(filepath,encoding='gbk', errors='ignore'):
  21.             # print(str(line))
  22.             f.writelines(line)
  23.             # f.write('\n')
  24. #关闭文件

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

不是的,解决了,是、排序的问题,文件第1000章这些比第1章排序要前。解决方法 用一个natsort排序再输出就好了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 03:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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