|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 meiszp 于 2017-9-1 09:20 编辑
提取当前目录下所有txt文件最后一行第一个数据,将txt文件名和提取的数据写入list.txt,第一列文件名,第二列数据。
如下代码报错,求指正,谢谢!
- # -*- coding: utf-8 -*-
- import os
- import shutil
- import codecs
- number=0
- for root, dirs, files in os.walk(".",topdown=True):
- for filename in files:
-
- li=os.path.splitext(filename) #分割文件名得到列表[文件名,扩展名]
- if li[1]=='.txt':
- name=li[0]
- filelocation=os.path.join(root,filename) #原文件的地址
- newfilelocation=os.path.join(root,"list.txt")
-
- with open(filelocation,'r',encoding='utf-8')as file_object,codecs.open(newfilelocation,'w','utf-8')as newfile:
- lines=file_object.readlines() #读取全部内容
- LastLine=lines[-1]
- datalist=LastLine.split() #分割数据,生成列表
-
- data1=filename
- data2=datalist[0]
-
- newline=str(data1)+str(data2)+'\n'
-
-
- newfile.write(newline)
-
- number=number+1
-
-
- print("共%s个文件"%number)
- input()
复制代码
错误提示:
Traceback (most recent call last):
File "C:/Users/lenovo/Desktop/test/1.py", line 18, in <module>
LastLine=lines[-1]
IndexError: list index out of range
原代码中第16行,打开newfile时用了参数'w'是错误的,会导致你每次重写该文件,以至于无论目录下有多少txt文件,你只会写最后读到的一个txt文件的名称和数据。并且list.txt本身也是txt文件,所以,当读到这个list.txt文件的时候,你的file_object(同样是代码16行)是list.txt的上个版本,而紧接着又要newfile清空并重写这个list.txt文件。这会导致必然读到一个空文件。那么LastLine = lines[-1]必会报错,也就是你现在的错误原因。
修改办法:
1.保证之前的txt文件没有空的情况下只要把'w'改成'a'即可。
2.若不能保证之前的txt文件都不为空,则请加条件判断或者try块避免报错。
|
|