为什么Python脚本读取文件会导致我的计算机发出嘟嘟声?
我编写了一个小模块,它将搜索一个目录及其所有子目录中的文件,以查找输入字符串的出现。有几次它很方便,如果我记得我使用的函数/变量名,那么主要是查找旧脚本 所以,前几天当我使用这些功能时,我完全被搞糊涂了,开始非常微弱地从我桌子另一边的耳机里听到重复的嘟嘟声。起初我以为是有人的电话响了。但是没有,Python是通过摩尔斯电码与我通信的 我不知道为什么会这样。我一直在运行这些函数并收到嘟嘟声,但并不总是以相同的模式。这些函数仅打开具有读取权限的文件。代码就是这样的:为什么Python脚本读取文件会导致我的计算机发出嘟嘟声?,python,Python,我编写了一个小模块,它将搜索一个目录及其所有子目录中的文件,以查找输入字符串的出现。有几次它很方便,如果我记得我使用的函数/变量名,那么主要是查找旧脚本 所以,前几天当我使用这些功能时,我完全被搞糊涂了,开始非常微弱地从我桌子另一边的耳机里听到重复的嘟嘟声。起初我以为是有人的电话响了。但是没有,Python是通过摩尔斯电码与我通信的 我不知道为什么会这样。我一直在运行这些函数并收到嘟嘟声,但并不总是以相同的模式。这些函数仅打开具有读取权限的文件。代码就是这样的: import os import
import os
import glob
def directory_crawl_for_string(dir_name, string, ofile):
"""Crawl dir_name and all of its subdirectories, opening files and
checking for the presence of a string"""
#get input directory's listings
dir_contents = glob.glob(dir_name)
#loop over the listings
for dir_element in dir_contents:
if(os.path.isfile(dir_element)):
#read the file, checking for the string
check_for_string(dir_element, string, ofile)
else:
if(os.path.isdir(dir_element)):
directory_crawl_for_string(dir_element + '\\*', string, ofile)
def check_for_string(dir_element, string, ofile):
try:
ifile = open(dir_element, 'r')
except IOError as e:
pass
else:
count = 1
for line in ifile:
if(string in line.lower()):
print count,line,dir_element
ofile.write('%s,%d,%s' % (dir_element, count, line))
count += 1
ifile.close()
def init_crawl(start_dir, string, output_dir):
"""args:
start_dir - directory to start the crawl at
string - string to search for
output_dir - directory to write output text file inside of"""
if(output_dir):
fn = output_dir.rstrip('/').rstrip('\\') + '/dirs.txt'
else:
fn = 'dirs.txt'
ofile = open(fn, 'w')
ofile.write('file path,line number of occurance of "%s",exact line\n' % string)
directory_crawl_for_string(start_dir, string, ofile)
ofile.close()
print('list of files containing "%s" written to "%s"' % (string, fn))
要启动它,您需要传递init\u crawl()
要向下爬网的目录、要搜索的字符串以及要将输出文本文件写入的目录。例如:init\u crawl(r'C:\directory to crawl,'foo',r'C:\output directory')
我甚至不知道该问些什么具体问题,但为什么会这样?我可以看出,当函数试图读取PDF和电子表格等非文本文件时,通常会发出嘟嘟声。有时终端也会冻结
输出只是一个csv,其中包含找到字符串的文件路径列、行号和包含字符串的行。此行:
print count,line,dir_element
如果您向程序提供二进制文件,则可能正在打印
为了测试,这里有一个我写的小代码。Python将尝试按音符播放它。别担心。开心点:)
嗯,当你运行其他正在进行昂贵磁盘操作的程序时,你能听到嘟嘟声吗?也许你的硬盘已经损坏,并发出了死亡不可避免的警报?你刚刚发现,回显不可打印的ASCII字符可能会产生副作用,.@M.Baum ASCII的提示包括一些控制字符,如钟形字符,但也有其他字符(如垂直制表符等)。它们现在并没有真正被使用,至少不是为了最初的目的。
def bel(): return chr(7)
def wait(duration): return chr(0) * (duration*1000000)
song = ''
for _ in range(5):
song += bel()
song += wait(1)
song += bel()
song += wait(1)
song += bel()
song += wait(5)
print song