替换字符串的一部分并添加到它不会产生预期的结果

时间:2015-11-11 04:17:29

标签: python python-3.x replace lua filenames

我正在处理我的第一个脚本:尝试从文件夹中获取所有文件名(标题为Thing_XXfilename.png),删除一些初始字符(Thing_XX)以及它们的扩展名,然后插入一个一个重复的代码行。

我已经尝试过几十种变体,但是由于某些原因我不知道,输出是遍历每个原始文件名的字符(没有替换的影响)并将它们一个接一个地插入到代码中。

nf0 = 'Events.OnGameStart.Add( function ()\n\tif MyScript then\n'
nf1 = ' if MyScript.Thing.XX'
nf2 = ' then\n\t\telse\n\t\t\tMyScript.Thing.XX'
nf3 = ' = {"Misc.", nil, nil, "'
nf4 = '", "MyMod.XX'
nf5 = '", "Thing_XX'
nf6 = '", nil, nil, nil};\n\t\t\tend\n'
nfn = ' end\nend)'

import os

f = open("textures.lua", "w")
f.write(nf0)
for files in os.listdir(r'C:\Users\Myuser\Textures'):
    for filename in files:
        line = filename.replace('Thing_XX', '')
        line = filename.replace('.png', '')
        f.write(nf1 + filename + nf2 + filename + nf3 + filename + nf4 + filename + nf5 + filename + nf6)
f.write(nfn)
f.close()

这应该产生:

if MyScript.Thing.XXfilename1 then
        else
            MyScript.Thing.XXfilename1 = {"Misc.", nil, nil, "filename1", "MyMod.XXfilename1", "Thing_XXfilename1", nil, nil, nil};
            end

但结果是:

if MyScript.Thing.XXT then
        else
            MyScript.Thing.XXT = {"Misc.", nil, nil, "T", "MyMod.XXT", "Thing_XXT", nil, nil, nil};
            end

这里显示的字母'T'是第一个文件名的第一个字母(然后对所有文件名的每个字母重复广告)。

3 个答案:

答案 0 :(得分:1)

您正在使用双循环,只需要一个循环。

f = open("textures.lua", "w")
f.write(nf0)
for filename in os.listdir(r'C:\Users\Myuser\Textures'):
    line = filename.replace('Thing_XX', '')
    line = line.replace('.png', '')   ## also need to change this 
    f.write(nf1 + line + nf2 + line + nf3 + line + nf4 + line + nf5 + line + nf6)

答案 1 :(得分:0)

import os

base_string = (
    'something something {filename}\n'
    'something else {filename} blah blah')

output = ''

f = open("textures.lua", "w")
for filename in os.listdir(r'C:\Users\Myuser\Textures'):
    filename.replace('Thing_XX', '')
    filename.replace('.png', '')
    output += base_string.format(filename=filename)

output = (
    'top of file\n'
    '{output}\n'
    'bottom of file').format(output=output))

f.write(output)
f.close()

答案 2 :(得分:0)

您可以使用它来获取用户主目录:

os.getenv("HOME")

例如

print os.getenv("HOME")

将返回

c:\users\username