<p>好吧,这个结果并不奇怪。<code>fileinput</code>模块默认以文本模式打开文件,因此<code>\r\n</code>在单个<code>\n</code>中自动更改。因此正则表达式匹配每一行并删除所有的<code>\n</code>-这些<code>\r</code>已经被<code>fileinput</code>删除了。你知道吗</p>
<p>所以必须明确使用二进制打开模式。不幸的是,如果您使用python3.x(您的<code>print</code>语法所建议的),二进制模式将为您提供需要转换为字符串的字节。您的代码可能会变成:</p>
<pre><code>import sys
import fileinput
import os
import os.path
import re
# Descriptions: iterates over files in source directory, removes whitespace characters and saves to destination directory.
print ('Source Directory:', str(sys.argv[1]))
print ('Destination Directory:', str(sys.argv[2]))
for i in os.listdir(sys.argv[1]):
fullSource = (os.path.join(sys.argv[1], i))
fullDestination = (os.path.join(sys.argv[2], i))
newfile = open(fullDestination, "x")
for line in fileinput.input(fullSource, mode='rb'): # explicite binary mode
line = line.decode('latin1') # convert to string in Python3
matchObj = re.search('(?<!\r)\n', line)
if matchObj:
newfile.write(line.rstrip('\r\n'))
else:
newfile.write(line)
newfile.close
print ("created " + fullDestination)
</code></pre>