我需要创建一个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?
答案 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
语句将关闭文件对象。