【问题标题】:python glob & sys.argv error, and regex not workingpython glob & sys.argv 错误,正则表达式不起作用
【发布时间】:2017-08-05 06:46:06
【问题描述】:

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

【问题讨论】:

    标签: python regex glob argv


    【解决方案1】:

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

    改为:

    dirname = sys.argv[1]
    

    【讨论】:

    • 您的解释是可以理解和有帮助的。我进行了更改,并且成功了。谢谢!
    猜你喜欢
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多