初学写的一个为了批量改文件名并记录失败与成功更改文件的程序,但是觉得短短一个功能写的一大堆东西,有没有人有空帮忙看看
打开文件读数据可以用 with open('filename.txt', 'r') as f:
的写法
读数据分行可以写成 oldname = [line.strip() for line in f.read().split('\n')]
,此处意思是 f.read()
读整个文件成一个字符串, split('\n')
按换行符分割字符串,最后使用变量 line
便利分割后的字符串,将 line.strip()
存入列表(因为 Windows 平台使用 \n\r
作为换行符,所以此处用 strip()
将 line
前后的不可见字符去掉
顺带一提你的 f.close
并没有真正关闭文件,正确的写法应该是 f.close()
有个潜在的问题是 oldname 和 newname 的长度可能不一至导致出bug,此处可使用 zip
函数合并两个列表,避免oldname存在但newname不存在
for oldname, newname in zip([1,2,3], [a,b]):
print(oldname, newname)
# 输出为
1 a
2 b
更多方便迭代的函数可以看看 itertools
这个模块
列表拼接字符串可以不用循环,例如 ', '.join(['a', 'b', 'c'])
会得到 a, b, c
字符串(就是把逗号和空格插入到列表元素之间)
也就是那部分改成 '\n'.join(failed_name) 就能得到拼接好的字符串
还有 i=i+1 b=b+1 这几个代码是无效的, for i in xxxx
这样 i 本来在循环里就会自动增加,每次循环迭代都会重新设置 i 的值
感觉你的写法很有 c / java 的风格啊,挺有意思的,虽然没什么问题但 python 的一个好处就是在于代码精炼可读性高,题主感兴趣的话可以找本 python 动物书或者看看 python 标准库,熟悉一下有哪些现成的轮子
还好吧,基本没有过分冗余的代码,只不过io看起来较多,如果你要简化代码建议简化一下数据存储的方法,或者简化一下读取文件内容的代码。