Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python搜索CSV文件并返回相关信息_Python_Regex_Csv_Python 3.x - Fatal编程技术网

Python搜索CSV文件并返回相关信息

Python搜索CSV文件并返回相关信息,python,regex,csv,python-3.x,Python,Regex,Csv,Python 3.x,我有一个csv文件,其中包含我们网络上一些计算机的信息。我希望能够从命令行键入一个快速行,以便从csv返回相关项目。格式如下: $ tag.py *hostname* csv大约有50列,包含从MAC地址到网络上最后一次看到的信息。我只想在搜索时输出这些列的选择。我已经编写了必要的代码,它可以正常工作。不过,我希望搜索更加灵活。目前,搜索词必须与我搜索的值完全相同。阿卡 $ tag.py mycomputer # This returns nothing $ tag.py myc

我有一个csv文件,其中包含我们网络上一些计算机的信息。我希望能够从命令行键入一个快速行,以便从csv返回相关项目。格式如下:

$ tag.py *hostname*
csv大约有50列,包含从MAC地址到网络上最后一次看到的信息。我只想在搜索时输出这些列的选择。我已经编写了必要的代码,它可以正常工作。不过,我希望搜索更加灵活。目前,搜索词必须与我搜索的值完全相同。阿卡

$ tag.py mycomputer        # This returns nothing
$ tag.py mycomputer.co.uk  # This returns the information I want
$ tag.py 63746             # This returns nothing
$ tag.py 00063746          # This returns the information I want
现在我来看看我的代码

# Import Modules

import sys
import csv

# Get user Input
# I assume the script is used in the form script.py "search-term"
# If no input added to command, ask for user input

if len(sys.argv) < 2:
    print("Please enter a hostname or asset number.")
    search_1 = input("Search for:")
else:
    search_1=sys.argv[1]

# Setup Variables
# Open cvs and setup csv.reader settings

csvfile = open("file.csv", "r", encoding="Latin-1")
csvfile.seek 
reader = csv.reader(csvfile, dialect='excel', delimiter=",", quotechar="'")

# Search cvs for the input string

for line in reader:
    if search_1 in line:
        print("------------------------------------------------------")
        print("  Hostname = " + line[10])
        print("  " + line[11])
        print("  AssetId = " + line[30])
        print("  IP = " + line[7])
        print("  MAC = " + line[6])
        print("  Owner = " + line[15])
        print("  Username = " +line[14])
        print("  Tel = " + line[17])
        print("  Last Seen = " + line[27])
        print("------------------------------------------------------")

csvfile.close()
#导入模块
导入系统
导入csv
#获取用户输入
#我假设脚本是以script.py“搜索词”的形式使用的
#如果命令中未添加任何输入,请请求用户输入
如果len(系统argv)<2:
打印(“请输入主机名或资产号”)
搜索_1=输入(“搜索:”)
其他:
search_1=sys.argv[1]
#设置变量
#打开cvs并设置csv.reader设置
csvfile=open(“file.csv”,“r”,encoding=“拉丁语-1”)
csvfile.seek
reader=csv.reader(csvfile,dialogue='excel',delimiter=“,”,quotechar=“”)
#在cvs中搜索输入字符串
对于行内读取器:
如果搜索第1行:
打印(“--------------------------------------------------------------”)
打印(“主机名=”+行[10])
打印(“+行[11])
打印(“AssetId=”+行[30])
打印(“IP=”+行[7])
打印(“MAC=”+行[6])
打印(“所有者=”+行[15])
打印(“用户名=”+行[14])
打印(“电话=”+行[17])
打印(“上次看到的=”+行[27])
打印(“--------------------------------------------------------------”)
csvfile.close()

如果我搜索主机名或向资产编号添加额外的0个字符,我希望代码能够忽略fqdn。我想我可以用
len(search_1)解决资产编号问题<8
在前面添加一些
0
,直到它有8个字符长,但这避免了一个事实,即我真的更喜欢只搜索字符串,而不操纵它以匹配我要查找的内容。

与其测试输入字符串是否在行中,不如测试输入字符串是否在任何列中。最理想的情况是:

if any(search_1 in col for col in line):

要稍微分解一下:您的
csv.reader()
iterable中的每一行本身就是一个列列表,您可以循环这些列
对于第行中的列
就是这样做的。我们测试
search\u 1
是否存在于列中,列中有
search\u 1
,并且
any()
将执行循环,直到找到列中
search\u 1在列中为
True
,在这种情况下,它停止循环并返回
True
本身。如果未找到匹配项,则返回
False

非常感谢。这正是我所需要的。它现在工作得很好:)