如何使用文件内容重命名多个文件
How to use the file content to rename multiple files
我有两个文件(运行-2015-01-01.txt 和 运行-2015-01-02.txt),每个文件都有一个设备主机名信息文件。我的目标是通过剥离 "Running" 重命名这些文件,并将其替换为文件内容中的设备主机名。
这就是我目前所拥有的。解释器没有显示任何错误,但我的目标文件没有任何反应:
for filename in glob.glob("Running*"):
selected_file = open(filename, "r").readlines()
for i, s in enumerate(filename):
if "hostname" in filename:
hostname_file = str(filename[i][8:]).strip()
os.rename(filename, hostname_file + filename[7:])
我还创建了单独的函数来重命名文件并从文件中收集内容信息,它们起作用了。
从文件内容中收集信息
def collect_string():
filename = raw_input("Enter your filename : ")
selected_file = open(filename, "r")
line = selected_file.readlines()
date_time = datetime.datetime.now().strftime("%Y-%m-%d")
for i, s in enumerate(line):
if "hostname" in s:
output = str(line[i][8:]).strip()
print output
重命名文件
def rename_file():
for filename in os.listdir("."):
if filename.startswith("Running"):
os.rename(filename, "Config" + filename[6:])
在您的 collect_string
函数中,您测试 "hostname" 是否在文件的行中,这有效。在你的第一个函数中,你测试它是否在文件名中,这当然不起作用。
此外,您不需要使用 enumerate
。您可以使用语法 for element in myList
循环遍历列表,就像在您的函数 rename_file
.
中一样
最后为了避免混淆,我建议使用更清晰的变量名。
您的代码已修复(但未经测试):
def rename():
for filename in glob.glob("Running*"):
newName=collect_hostname(filename)+ filename[7:]
os.rename(filename,newName)
def collect_hostname(filename)
with open(filename) as f: #best practice to open a file
for line in f:
if "hostname" in line:
return line[8:].strip() #line is already a string, no need for str
我有两个文件(运行-2015-01-01.txt 和 运行-2015-01-02.txt),每个文件都有一个设备主机名信息文件。我的目标是通过剥离 "Running" 重命名这些文件,并将其替换为文件内容中的设备主机名。
这就是我目前所拥有的。解释器没有显示任何错误,但我的目标文件没有任何反应:
for filename in glob.glob("Running*"):
selected_file = open(filename, "r").readlines()
for i, s in enumerate(filename):
if "hostname" in filename:
hostname_file = str(filename[i][8:]).strip()
os.rename(filename, hostname_file + filename[7:])
我还创建了单独的函数来重命名文件并从文件中收集内容信息,它们起作用了。
从文件内容中收集信息
def collect_string():
filename = raw_input("Enter your filename : ")
selected_file = open(filename, "r")
line = selected_file.readlines()
date_time = datetime.datetime.now().strftime("%Y-%m-%d")
for i, s in enumerate(line):
if "hostname" in s:
output = str(line[i][8:]).strip()
print output
重命名文件
def rename_file():
for filename in os.listdir("."):
if filename.startswith("Running"):
os.rename(filename, "Config" + filename[6:])
在您的 collect_string
函数中,您测试 "hostname" 是否在文件的行中,这有效。在你的第一个函数中,你测试它是否在文件名中,这当然不起作用。
此外,您不需要使用 enumerate
。您可以使用语法 for element in myList
循环遍历列表,就像在您的函数 rename_file
.
最后为了避免混淆,我建议使用更清晰的变量名。
您的代码已修复(但未经测试):
def rename():
for filename in glob.glob("Running*"):
newName=collect_hostname(filename)+ filename[7:]
os.rename(filename,newName)
def collect_hostname(filename)
with open(filename) as f: #best practice to open a file
for line in f:
if "hostname" in line:
return line[8:].strip() #line is already a string, no need for str