Python:从CSV重命名文件

时间:2019-03-10 02:42:22

标签: python

问题

我有不同语言的单词列表及其英语翻译:

#;Eng;Spanish;
1;yes;si;
2;no;ningun;
3;question;cuestión;

对于所有这些单词(或条目),我都有一个音频文件,说明如何发音(来自Forvo)。音频文件用语言和“#”值命名。因此, spanish1.m4a spanish2.m4a spanish3.m4a 等。

现在,我想按以下方式重命名该文件: yes-si-1.m4a

脚本

import pandas as pd
import os

os.chdir('/Users/user/Desktop/audio')

df = pd.read_csv('hebrew.csv', delimiter=';')

Row = (df['#']) #line number
Eng = (df['Eng']) #English trans
HebF = (df['HebF']) #Feminine
HebM = (df['HebM']) #Masculine

for filename in os.listdir():

oldName = os.path.basename(filename)

num = oldName.strip('hebrew')

现在,我对If语句有一些想法。如果Row等于Num,则将文件名更改为 Eng + HebF + Row +“。m4a”

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您的方向正确。要修复的两个主要问题是:

  • 为了在编程中重命名文件,通常使用不同的名称将它们移动到同一文件夹中。使用shutil module of Python's standard library可以轻松做到这一点。
  • 尝试让自己保持简单。无需更改目录并为文件构建绝对路径-只需将python脚本与要重命名的文件放在同一文件夹中,在该文件夹中打开终端并执行脚本即可。只需传递文件名,Python就可以查看同一文件夹中的文件,而无需完整路径。

以下代码为您的OP中的西班牙csv示例提供了所需的功能,重命名了文件spanish1.m4aspanish2.m4aspanish3.m4a。请注意:

1)所有文件(代码,csv和.m4a文件)都应位于同一目录中;

2)我正在使用f-strings来构建文件名字符串-希望格式化从代码中是显而易见的;

3)您需要进行一些重构,以使代码可以与其他语言的文件一起使用。

使用pandas对于此任务来说是多余的,但是我不想过多地更改您的代码结构。如果您有任何疑问,请告诉我。

import pandas as pd
import shutil

df = pd.read_csv('spanish.csv', delimiter=';')

Row = (df['#']) #line number
Eng = (df['Eng']) #English trans
Spa = (df['Spanish']) #Spanish 

for i in Row:
    eng = Eng[i-1]
    spa = Spa[i-1]
    old_file = f"spanish{i}.m4a"
    shutil.move(old_file, f"{eng}-{spa}-{i}.m4a")

答案 1 :(得分:0)

请先备份文件,然后再尝试

为什么要使用Python甚至是pandas,也可以只使用awk

awk -F ';' '{ if($1!="#") system("mv spanish"$1".m4a "$2"-"$3"-"$1".m4a") }' list.csv

这将根据您的规则重命名spanish#.m4a文件。您可以将其应用于您的hebrew问题。