我有一个包含大约50,000个文本文件的文件夹,我需要看看它们中是否有任何行只以CR字符结尾(不是CR / LF或LF) - 十六进制0x0D。
以下代码不会返回任何结果,并且需要很长时间才能处理。
import re
import os
rootDir = 'Z:\Archive\\20160701'
for root, dirs, files in os.walk(rootDir):
print('--\nroot = ' + rootDir)
for filename in rootDir:
file_path = os.path.join(rootDir, filename)
print('Searching file: %s' % filename)
with open(file_path, 'r') as f:
f_content = f.read()
check = re.search('[\x0D$]', f_content, re.MULTILINE)
if check:
print check
gotit = open('U:\Temp3\\foundit.txt', 'a')
gotit.write(file_path + '\n')
gotit.close()
提前感谢任何人都能提供的见解。我知道文件夹中至少有一个文件只有0x0D字符的换行符。
答案 0 :(得分:1)
这一行错了:
for filename in rootDir: # rootDir is 'Z:\Archive\\20160701'
应该是:
for filename in files:
如果所有文件都在一个文件夹中,正如您所说,它更容易使用os.listdir
您不需要os.walk
的所有权力,它可以让您拥有整个树。根目录,包括子目录和文件。
现在,至于使用regex
来检测换行符,问题是当Python以'r'
模式打开文件时,read
或readline
会更改换行符全部为\n
。
选项是以'rb'
模式打开文件:
LF = b'\n'
CR = b'\r'
CRLF = b'\r\n'
def sniff(filename):
with open(filename, 'rb') as f:
content = f.read()
if CRLF in content:
newline = 'CRLF'
elif LF in content:
newline = 'LF'
elif CR in content:
newline = 'CR'
return newline
* nix系统使用file
命令来确定文件类型。 file
可以根据"幻数",扩展名等检测文件类型,以便确定文本文件的类型对file
什么让我蹒跚一段时间是我在使用nano测试在mac上创建的文本文件的时候。我得到\n
而不是预期的\r
,直到我found out MacOS更改为\n
才能符合Unix标准,将\r
留给遗留文本文件。
希望这有点帮助。\ n
EOF