我正在处理我的第一个脚本:尝试从文件夹中获取所有文件名(标题为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'是第一个文件名的第一个字母(然后对所有文件名的每个字母重复广告)。
答案 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