如何使用 python 根据数据框中的列元素更改文件夹中的文件名
How to change the file names in a folder based on a column elements in a data frame using python
我有一个数据框 'df' 和一个文件夹(路径:F:\folder),其中包含与 df['name'] 同名的文件。即 aa、fg、dc 和 vb.
df=
key name
hi-1 aa
hi-2 fg
hi-3 dc
hi-4 vb
我有兴趣更改文件夹中这些文件的名称及其在 df['key'] 列同一行中的相应元素。即将文件 aa 重命名为 hi-1,fg 重命名为 hi-2,依此类推。
我尝试通过以下方式做到这一点:
import glob, os
os.chdir(r'F:\folder')
for file in glob.glob("*.txt"):
os.rename(file, df['key'])
但是,它不起作用,而且它会根据字符串在 df['key'] 列中的保存顺序分配文件名,这是不正确的,因为文件可以是在文件夹中的顺序不同。
这是一种方法:
import os
os.chdir("path_to_your_folder")
names_dict = dict(zip(df['key'], df['name']))
for new_name, old_name in names_dict.items():
os.rename(old_name, new_name)
试试这个:
import pandas as pd
import os
## Your Dataframe
data = {
'key':['hi-1', 'hi-2', 'hi-3', 'hi-4'],
'name':['aa', 'fg', 'dc', 'vb']
}
df = pd.DataFrame(data)
## File path
path = r'home\folder'
for rownum, row in df.iterrows():
# Get names
old_name = row['name']
new_name = row['key']
## Rename file in folder
os.rename(os.path.join(path, old_name), os.path.join(path, new_name))
这是一个您可以尝试的解决方案,
for i in df.to_dict(orient='records'):
if os.path.exists(rf'F:\folder\{i["name"]}.txt'):
os.rename(
rf'F:\folder\{i["name"]}.txt', rf'F:\folder\{i["key"]}.txt'
)
我有一个数据框 'df' 和一个文件夹(路径:F:\folder),其中包含与 df['name'] 同名的文件。即 aa、fg、dc 和 vb.
df=
key name
hi-1 aa
hi-2 fg
hi-3 dc
hi-4 vb
我有兴趣更改文件夹中这些文件的名称及其在 df['key'] 列同一行中的相应元素。即将文件 aa 重命名为 hi-1,fg 重命名为 hi-2,依此类推。
我尝试通过以下方式做到这一点:
import glob, os
os.chdir(r'F:\folder')
for file in glob.glob("*.txt"):
os.rename(file, df['key'])
但是,它不起作用,而且它会根据字符串在 df['key'] 列中的保存顺序分配文件名,这是不正确的,因为文件可以是在文件夹中的顺序不同。
这是一种方法:
import os
os.chdir("path_to_your_folder")
names_dict = dict(zip(df['key'], df['name']))
for new_name, old_name in names_dict.items():
os.rename(old_name, new_name)
试试这个:
import pandas as pd
import os
## Your Dataframe
data = {
'key':['hi-1', 'hi-2', 'hi-3', 'hi-4'],
'name':['aa', 'fg', 'dc', 'vb']
}
df = pd.DataFrame(data)
## File path
path = r'home\folder'
for rownum, row in df.iterrows():
# Get names
old_name = row['name']
new_name = row['key']
## Rename file in folder
os.rename(os.path.join(path, old_name), os.path.join(path, new_name))
这是一个您可以尝试的解决方案,
for i in df.to_dict(orient='records'):
if os.path.exists(rf'F:\folder\{i["name"]}.txt'):
os.rename(
rf'F:\folder\{i["name"]}.txt', rf'F:\folder\{i["key"]}.txt'
)