将文本文件添加到代码的开头会导致解析错误
本文关键字:错误 开头 文件 文本 添加 代码 | 更新日期: 2023-09-27 18:03:13
我正在使用这个python脚本在我所有的c#脚本的开头添加版权演讲
import re
import shutil
import os
copyrightloc = 'C:/DATA/pyscripts/copyright.txt'
rootdir = 'C:/DATA/pyscripts/02_CODE'
dstdir = 'C:/DATA/pyscripts/codecopy'
spielfile = open(copyrightloc, "r")
spiel = spielfile.read()
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file.endswith(".cs"):
with open(subdir+'/'+file, "r+") as codefile , open(dstdir+'/'+file, 'w') as destfile:
destfile.write(spiel+''n' + codefile.read())
正如您所看到的,我正在将原始字符串添加到版权字符串中,并将其写入新文件。
文件完成时看起来很好,但在每个文件中,在原始文件的第一行,我得到一个解析错误。例如,下面显示了新文件中版权标识末尾和原始文件开头的摘录…
BLAH BLAH BLAH COPYRIGHT
* OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
* CONTRACT, NEGLIGENCE, TORT OR OTHERWISE, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE OR ITS DERIVATIVES.
*/
using UnityEngine; [!!!ERROR IS SHOWN ON THIS LINE!!!]
using System.Collections;
public class Floop : MonoBehaviour {
public rot glorb;
public GameObject foo;
BLAH BLAH BLAH MY CODE
我猜那里有一些不可见的字符,如"文件结束"或其他东西,但我在notepad++中看不到任何东西,当我选择"显示所有字符"…如果我转到问题行的开头并点击删除,错误就会消失。我怎样才能使我的python脚本避免这个问题?
MSDN c#风格指南说你不应该在注释周围使用星号。你能试着在版权的每一行前加上//
吗?
或者,您也可以使用这种格式(注意每行开头没有星号):
/*
copyright here
*/
也许你的文件包含一个'字节顺序标记',这是一些特殊的字符,在文件的开头表示编码。
如果您在期望的字符之前看到一些额外的字符,请使用HEX编辑器检查。
如果是这种情况,那么您应该使用'utf-8-sig'编码。我不是python导出,但你的代码可能看起来像这样
...
spielfile = codecs.open(copyrightloc, "r", encoding="utf-8-sig")
...
with codecs.open(subdir+'/'+file, "r+", encoding="utf-8-sig") as codefile , open(dstdir+'/'+file, 'w', encoding="utf-8-sig") as destfile:
在版权文本中有可能存在未正确编码的unicode字符尝试使用codecs模块
import re
import shutil
import os
import codecs
copyrightloc = 'C:/DATA/pyscripts/copyright.txt'
rootdir = 'C:/DATA/pyscripts/02_CODE'
dstdir = 'C:/DATA/pyscripts/codecopy'
spielfile = codecs.open(copyrightloc, "r", encoding="utf8")
spiel = spielfile.read()
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file.endswith(".cs"):
with codecs.open(subdir+'/'+file, "r+",encoding="utf8") as codefile , open(dstdir+'/'+file, 'w') as destfile:
destfile.write(spiel+''n' + codefile.read())