python 3.3用户输入

时间:2014-01-01 18:06:20

标签: python python-3.x input io

我需要创建一个Python 3.3程序,在文件中搜索特定字符串,如果找到该字符串则打印该行。我有适用的代码,但每次我想运行它时,我都被迫重写程序。

import re
fh = open('C:\Web_logs\ex130801.txt')
for line in fh:
    if "admin_" in line:
        print(line)

有没有办法接受文件路径的用户输入,即C:\ Web_logs \ ex130801.txt?

3 个答案:

答案 0 :(得分:4)

当然,您可以使用sys.argv list从命令行中读取文件名:

import sys

with open(sys.argv[1]) as fh:
    for line in fh:
        if "admin_" in line:
            print(line)

您需要在命令行上使用文件名调用脚本:

python scriptname.py C:\Web_logs\ex130801.txt

另一种选择是使用input() function要求用户在脚本运行时输入文件名:

filename = input('Please enter a filename: ')    
with open(filename) as fh:
    for line in fh:
        if "admin_" in line:
            print(line)

答案 1 :(得分:1)

您可以使用3.2中的argparse module新内容。

首先,导入文件顶部的库:

import argparse

然后,创建一个解析器对象,告诉它你正在寻找两个命令行字符串,第一个是文件名,第二个是你要搜索的字符串:

parser = argparse.ArgumentParser(description='searches a file for a specific string and prints the line if the string is found.')
parser.add_argument("filename", type=str,help="file to search through")
parser.add_argument("searchstring", type=str, help="string to look for")

然后,在命令行上运行解析器对象,将包含您要查找的字段的对象作为字符串返回:

args = parser.parse_args()

现在,“args.filename”包含您的文件名,“args.searchstring”包含搜索字符串,因此以这种方式重写您的循环:

fh = open(args.filename)
for line in fh:
    if args.searchstring in line:
        print(line)

从命令行,您的一位用户现在可以执行以下操作:

$ python3 searcher.py /usr/dict/words bana

最好的部分是,如果用户未能提供您正在寻找的参数,该脚本会很好地告诉他们您正在寻找的语法:

$ python3 searcher.py
usage: searcher.py [-h] filename searchstring
searcher.py: error: the following arguments are required: filename, searchstring

更好的是,用户可以输入--help选项来获取程序的文档:

python3 .\searcher.py --help
usage: searcher.py [-h] filename searchstring

searches a file for a specific string and prints the line if the string is found.

positional arguments:
  filename      file to search through
  searchstring  string to look for

optional arguments:
  -h, --help    show this help message and exit

不要忘记您还可以将#!/ usr / bin / python3添加到代码顶部并更改可执行标志,然后不必在命令行上键入python3。

答案 2 :(得分:0)

import re
path = input("Please enter path to file: ")
fh = open(path)
for line in fh:
    if "admin_" in line:
        print(line)

记得在完成后关闭文件!假设您不需要对文件执行其他操作,则采用更Pythonic方式:

import re
path = input("Please enter path to file: ")
with open(path) as fh:
    for line in fh:
        if "admin_" in line:
            print(line)

一旦离开该块,with语句将关闭文件对象。