我有以下python脚本,它需要一些输入,并根据sys.argv将它们放在文件中。我想添加一些重复的条目检查...如果一个值通过sys.argv传递到一个文件中,但它已经存在,则不执行任何操作,否则将文本行打印到文件中。Python grep,如果语句
我正在考虑使用子进程和使用系统find/grep命令(分别用于windows/linux),但是我无法让这个测试工作。
任何想法/代码欢迎。
感谢
# Import Modules for script
import os, sys, fileinput, platform, subprocess
# Global variables
hostsFile = "hosts.txt"
hostsLookFile = "hosts.csv"
hostsURLFileLoc = "urls.conf"
# Determine platform
plat = platform.system()
if plat == "Windows":
# Define Variables based on Windows and process
#currentDir = os.getcwd()
currentDir = "C:\\Program Files\\Splunk\\etc\\apps\\foo\\bin"
hostsFileLoc = currentDir + "\\" + hostsFile
hostsLookFileLoc = currentDir + "\\..\\lookups\\" + hostsLookFile
hostsURLFileLoc = currentDir + "\\..\\default\\" + hostsURLFileLoc
hostIP = sys.argv[1]
hostName = sys.argv[2]
hostURL = sys.argv[3]
hostMan = sys.argv[4]
hostModel = sys.argv[5]
hostDC = sys.argv[6]
# Add ipAddress to the hosts file for python to process
with open(hostsFileLoc,'a') as hostsFilePython:
# print "Adding ipAddress: " + hostIP + " to file for ping testing"
# print "Adding details: " + hostIP + "," + hostName + "," + hostURL + "," + hostMan + "," + hostModel + " to file"
hostsFilePython.write(hostIP + "\n")
# Add all details to the lookup file for displaying on-screen and added value
with open(hostsLookFileLoc,'a') as hostsLookFileCSV:
hostsLookFileCSV.write(hostIP + "," + hostName + "," + hostURL + "," + hostMan + "," + hostModel + "," + hostDC +"\n")
if hostURL != "*":
with open(hostsURLFileLoc,'a+') as hostsURLPython:
hostsURLPython.write("[" + hostName + "]\n" + "ping_url = " + hostURL + "\n")
UPDATE:我想叫基础上,通过提供steveha,我在与os.rename部分麻烦小片段
>>> import os
>>> import sys
>>> in_file = "inFile.txt"
>>> out_file = "outFile.txt"
>>> dir = "C:\\Python27\\"
>>> found_in_file = False
>>> with open(in_file) as in_f, open(out_file,"w") as out_f:
... for line in in_f:
... if line.endswith("dax"):
... found_in_file = True
... if not found_in_file:
... out_f.write("192.168.0.199\tdax\n")
... os.rename(os.path.join(dir, in_f), os.path.join(dir,out_f))
到我得到以下错误。
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
File "C:\Python27\lib\ntpath.py", line 73, in join
elif isabs(b):
File "C:\Python27\lib\ntpath.py", line 57, in isabs
s = splitdrive(s)[1]
File "C:\Python27\lib\ntpath.py", line 125, in splitdrive
if p[1:2] == ':':
TypeError: 'file' object is not subscriptable
有什么想法?
[建议不要在同一行放置多个导入。](http://www.python.org/dev/peps/pep-0008/#imports) – moooeeeep
是否有这个原因...我是python新手,我只是假定它比较整洁。 – MHibbin
@moooeeeep将他的整个评论变成可点击的链接。如果你点击它,你会被带到一个网页,该网页解释了这个原因。 – steveha