Python中的Begginer需要一些帮助。我使用的是python2.7。你知道吗
我想做一个程序,连接我在一个文件夹中的最后100个文件。在那个文件夹中,我有很多文件,但我只想要最后100个文件的串联。我可以将所有的文件串联起来(如果我没有指定编号并更改for循环),但是我不能选择最后100个文件。这些文件由软件。他们保存在下面指定的文件夹中。我想删除,这100个文件一次是在新的连接一个。那个我做的程序如下:
#!/usr/bin/python
import os
import glob
os.chdir("C:\AFM_test\jpk_files")
rout=""
filename=glob.glob("*-*-*.*.*-*.*.*.jpk-force")
filename.sort(key=os.path.getmtime)
for filename in range(0,99):
filename=open(filename,"rb")
tout=filename.read()+\r\n"
rout = rout+tout
os.remove(filename)
filename.close()
fout = open("output.jpk-force","wb+")
fout.write(rout)
fout.close()
它什么都不做,错误如下:
Traceback (most recent call last):
File "C:\AFM_test\jpk_files\AFM_test.py", line 12, in <module>
filename = open(filename,"rb")
TypeError: coercing to Unicode: need string or buffer, int found
[Finished in 0.1s]
我想问题在于循环及其结构“range(0,99)”,因为我连接了文件夹中包含的所有文件:
#!/usr/bin/python
import os
import glob
os.chdir("C:\AFM_test\jpk_files")
rout=""
filename=glob.glob("*-*-*.*.*-*.*.*.jpk-force")
for filename in files:
filename=open(filename,"rb")
tout=filename.read()+\r\n"
rout = rout+tout
os.remove(filename)
filename.close()
fout = open("output.jpk-force","wb+")
fout.write(rout)
fout.close()
它工作正常,但删除顺序显示此错误:
Traceback (most recent call last):
File "C:\try\AFM_test_2.py", line 17, in <module>
os.remove(filename)
must be string, not file
有什么办法可以实现我的目标吗?你知道吗
我希望我已经解释清楚了。也许我错过了一些重要的东西,对不起,我只是这个领域的初学者。你知道吗
谢谢你。你知道吗
您需要更改:
…比如:
然后,当调用
os.remove(filename)
时,它仍然是原始循环中的文件名,而不是代码重新分配给这个变量的file object。你知道吗注意:不要显式地打开和关闭文件,而是尝试使用
with
语句(参见this helpful guide)。你知道吗Checn如果
glob
是匹配模式通过构建每个包含文件名和mtime的元组列表来获取mtime排序的文件列表
按mtime降序排列列表
以上两行可以简化为:
上面的行可以重构,因为我们可以就地排序
filenames.sort(key=os.path.getmtime,reverse=True)
你没有检查例外情况。你知道吗
这是因为
filename
是一个整数,然后您试图用一个字符串连接它。你知道吗这是因为您正在将变量filename(它是一个字符串路径)重新分配给文件句柄/对象。
os.remove(..)
期望来自for循环的变量,而不是open(..)
的结果。通常给变量赋予有意义的名称是一种好的做法filepath
和infile
等更好的方法是:
相关问题 更多 >
编程相关推荐