我是一个自学成才的Python新手,我已经对python的运行方式有了一个基本的了解,但是我坚持以下几点。在Python中重命名文件
我有一个文本文件列表,它是邮箱名称的交换服务器邮件转储。我有数百个这些文本文件,它们目前的名称格式为Priv_date.txt
,例如Priv_02JAN2004.txt
。我需要能够告诉他们来自哪些服务器,因此在这些文本文件中,我想要读取具有实际邮件服务器名称(服务器:MAILSERVER1)的10行,并将其添加或附加到原始文件名。
我想结束的文件名是MAILSERVER1_PRIV_02JAN2004.txt
。我对自己能做什么也做不了,对文件路径和名称感到困惑,但看不出我做错了什么。据我得为这样:
import os,sys
folder = "c://EDB_TEMP"
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
fullpath=os.path.join(root,filename)
filename_split = os.path.splitext(fullpath)
#print fullpath
#print filename
with open (fullpath, "r") as tempfile:
for line in tempfile.readlines():
if "Server:" in line:
os.rename(tempfile,+line[10:]+fullpath)
但我不断收到此错误:
error is TypeError: bad operand type for unary +: 'str'
感谢您的输入。我可以看到我在原文中错过了什么。我一直在看你已经添加的代码o0rebelious0o(谢谢!)我已经通过了它,所以它对我来说很有意义,但我仍然得到一个错误:[Error 32]进程无法访问文件,因为它是被另一个进程使用 不知道为什么。我已经使用过Proc Explorer,并检查了开始解锁,我甚至尝试添加一个新的路径到根变量,所以重命名应该发生在不同的目录中,但似乎没有任何区别。我正在使用Windows 7x64位操作系统。 – user2377057 2013-05-13 19:54:11
它给你这个错误的原因是因为你试图在while文件打开块内重命名文件。文件处于打开状态时,操作系统会锁定它,因此无法重命名。使用python时,需要注意的一点是,缩进块的处理方式与使用java和C等语言中的加紧代码相同,所有缩进的代码都在相同条件下执行,即在with语句中执行。你所需要做的就是把if()语句与with open语句联系起来,它应该在理论上起作用。另请检查创建.txt日志的进程是否未运行 – o0rebelious0o 2013-05-13 21:46:48
再次感谢。这就说得通了。我可能要求在一根棍子上的月球......在Python中:-) ..但我现在得到一个错误123文件名,目录,卷是不正确的。我已经完成了最后一行的打印,并且它(或者也许是我)似乎将一个eol字符放在行中,所以输出看起来像MAILSERVER \ nPRIV_02JAN2004.txt。我看不出为什么。 – user2377057 2013-05-14 05:29:33