python glob& sys.argv错误,正则表达式无法正常工作

时间:2017-08-04 21:42:28

标签: python regex glob argv

我对使用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

1 个答案:

答案 0 :(得分:0)

[1:]表示你想要从第二个到最后一个项目的所有项目,实际上而不是获得一个字符串,你得到一个列表(是的,即使它包含一个项目,它也是一个列表)。
 os.listdir需要单个路径,而不是列表

代替:

dirname = sys.argv[1]