请帮我以下的问题:变化符合脚本(Python或bash)的
(1)我需要找到一个文件夹中的所有* .txt文件夹及其子 ( 2)在这些纯文本文件中,有一行以“#GAP:6009,27”开头。我想在所有文件中改变这个值,减少175。例如:之前:“#GAP:6009,27”,之后:“#GAP:5834,27”。
文本文件包含很多行,只有特定的行应该更改。例如:
[...]
#MedleyEndBeat:790
#BPM:335,53
#GAP:6009,27
#ENCODING:CP1252
[...]
我该如何做到这一点?
我的想法:
找到所有的txt文件,并运行Python脚本
find musicdir -name \*.txt -exec ./mypythonscript {} \;"
Python脚本包含像这样(只是想法,语法是完全错误的,我知道,但我会看它后来):
filepath = open($1)
with open(filepath) as file:
for line in file:
if line[0:5] == "#GAP:" then
newvalue = calc(line[6:]-175) # extract substring (the GAP value till end of line)
newfile += "#GAP:" + newvalue
GAP_FOUND = 1
else
newfile += line
write(filepath) << newfile
if GAP_FOUND != 1 then
echo "ERROR: GAP LINE NOT FOUND IN"+filepath
那么有没有更好的方法来做到这一点?或者可以这样做?我不是专业的编码器,这就是为什么我的方法可能看起来不好:)
有很多方法可以做到这一点,但如果你已经知道python,那么这看起来很好。就我个人而言,我会制作一个更改后的文件的副本,只有当你知道内容全部写完,但可能比你需要的更偏执狂 – 2015-02-07 08:52:45
你走在正确的轨道上,但你绝对可以更优雅。你可以让python脚本自己找到所有的文件。您可以使用多个上下文管理器一次打开多个文件,并且可以更有效地利用内存。 Gap_found应该只是一个布尔值。如果你想超级漂亮,那么你可以使用线程或多处理来做得更快。 – 2015-02-07 09:09:00
谢谢大家!我学到了很多。很多不同的方法来解决这个问题=) – merlin 2015-02-07 16:34:20