我对使用glob,sys,re和os模块的脚本有两个问题。该脚本枚举目录并在所有文件中搜索字符串。如果我将绝对路径分配给变量但不执行正则表达式,则会运行它。我需要更改脚本以使用sys.argv,以便用户可以在终端中指定路径(例如:./replace_students.py /home/alex/Documents/
)。当我将dirname变量从"dirname = "/home/alex/Documents/""
更改为"dirname = sys.argv[1:]"
时,我收到错误
" TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表"。
我需要有关错误的帮助并让正则表达式工作。
import os, glob, sys, re
#dirname = "/home/alex/Documents"
dirname = sys.argv[1:]
os.listdir(dirname)
for filename in glob.glob('*'):
with open(filename) as f:
contents = f.read()
if 'students' in contents:
contents = contents.replace(r" students", "pupils")
print contents
答案 0 :(得分:0)
[1:]
表示你想要从第二个到最后一个项目的所有项目,实际上而不是获得一个字符串,你得到一个列表(是的,即使它包含一个项目,它也是一个列表)。
os.listdir
需要单个路径,而不是列表
代替:
dirname = sys.argv[1]