Казалось бы,
fileinput.input(file, inplace=True)
не позволяет вам указать кодировку, и это было корнем моей проблемы, потому что мои целевые файлы должны были указывать кодировку utf8.
Я смог переписать свой код более многословно, что позволило мне вместо этого использовать:
with open(file, 'r', encoding='utf8') as f:
... что позволяет мне указать кодировку.
Новый скрипт:
import fileinput
import datetime
import sys
import re
import os
year = str(datetime.datetime.now().year)
assemblyInfoPattern = re.compile(r"^\[assembly:\sAssemblyCopyright\(\"Copyright.*\]$")
for root, dirs, files in os.walk('.') :
for file in files :
if file == 'AssemblyInfo.cs' :
print (f'Checking {root}\\AssemblyInfo.cs')
outputFile = ""
with open(os.path.join(root, file), 'r', encoding='utf8') as f:
for line in f.readlines() :
replacementString = '[assembly: AssemblyCopyright("Copyright © 2014-' + year + '")]'
outputLine = assemblyInfoPattern.sub(replacementString, line)
outputFile = outputFile + outputLine
with open(os.path.join(root, file), 'w', encoding='utf8') as f:
f.write(outputFile)
Теперь мои выходные файлы содержат правильные строки:
[assembly: AssemblyCopyright("Copyright © 2014-2019")]
Yay.