当我将一个文本文件复制到另一个文本文件时,新文件具有两个字符:( ?? ),在我不需要的结尾。
我正在Windows7上使用Python3.6.0
这是我的脚本:
from sys import argv
script, from_file, to_file = argv
#Open from_file and get the text from it
indata = open(from_file).read()
#Write the from_file text to to_file
open(to_file, 'w').write(indata)
我在PowerShell中运行以下命令:
>echo "This is a test file." > TestSource.txt
>type TestSource.txt
This is a test file.
>python CopyFile.py TestSource.txt TestDestination.txt
>type TestDestination.txt
This is a test file.??
为什么在我创建的文件中出现两个问号(??)?
编辑:This Related Question被建议重复。我的问题是关于将一个文本文件复制到另一个文本时Python的行为。这个相关的问题是关于Windows PowerShell如何创建文本文件的。
答案 0 :(得分:7)
Powershell正在使用UTF-16创建文件。您已在文本模式(默认)下打开文件而未指定编码,因此python调用locale.getpreferredencoding(False)
并使用该编码(在我的Windows系统中为cp1252
)。
文本模式会翻译行尾,并且使用错误的编码会产生问题。要解决此问题,请使用二进制模式获取字节对字节的副本,而不管编码如何。我还建议使用with
来确保文件正确关闭:
from sys import argv
script, from_file, to_file = argv
#Open from_file and get the text from it
with open(from_file,'rb') as f:
data = f.read()
#Write the from_file text to to_file
with open(to_file,'wb') as f:
f.write(data)