匹配索引值
问题描述:
这是我当前的代码。我想检查两个值(行)来检查文件中的匹配项。匹配索引值
def checkOS():
fid1 = open("C:/Python/NSRLOS.txt", 'r')
fid2 = open("C:/Python/sha_sub_hashes.out", 'r')
outdata = open("osMatches.txt", 'w')
line1 = fid1.readline()
line2 = fid2.readline()
while(line1 and line2):
xline= line1.split(',')[1]
yline = line2.split("|")[3]
zline = xline.replace('"','')
if (yline == zline):
outdata.append([yline , zline])
print xline, zline
if __name__=="__main__":
checkOS()
唯一的问题是我不知道我写那有什么,if语句之前,所有的代码只是重新格式化,以便能够从该行的指数拉。我想知道的是,如果我使用的陈述在这个意义上是有效的并且是有效的?然后我想输出相等的值。 下面是在文件中的某些行:
file2:
"10","Amstrad 6128","Unknown","1006"
"100","Macintosh 9.0","8.5.1","67"
"101","Macintosh 9.0.4","na","67"
"102","Macintosh 9.1","9.1","67"
"103","Macintosh 9.2","9.2","67"
"104","Macintosh 9.2.2","9.2.2","67"
"105","Macintosh 9.x","9.X","67"
"106","Macintosh X","10","67"
"107","Macintosh7.5.3","7.5.3","67"
"108","NetWare","n/a","674"
"109","Novel Dos 7.0","7","609"
"11","Apple II+","Unknown","67"
"110","OS/2","Unknown","427"
file2:
DD84270022E57F1850C8454FA432ADFF99588157B|index.docbook|2225|Redhat 7.3 (32bit)|Linux
D84270022E57F1850C8464F5432ADFF99588157B|index.docbook|2225|Redhat 8.0 (32bit)|Linux
26EEEB25D7005F9FF9EE05A8084C77242702FBAD|Localizable.strings|2142|Mac OS X 10.4|OSX
34DC3D728C34E32F090307F575254D57E53C53FF|SYSTEM|10747904|Windows 7 Home Premium (32bit)|Windows
279E5A766C88EEA5AB946A0AF8D0C4FC366B2AF9|totem.devhelp|21324|Linux Ubuntu Desktop 9.10 (32bit)|Linux
279E5A766C88EEA5AB964A0AF8D0C4FC366B2AF9|totem.devhelp|21324|Linux Ubuntu Desktop 9.10 (64bit)|Linux
B3D11390AB8683BBE443A415EDD91BFDFD482134|dslconfig.pyc|6246|Redhat 9.0 (32bit)|Linux
现在,你可能不会发现这几行任何直接的比赛,但我知道,下了线的地方就会有至少一个比赛,因为我看到了同时浏览文件。
答
你可能寻找的是这样的:
使用with()
它会自动关闭该文件为您服务。
def checkOS():
with open("C:/Python/NSRLOS.txt") as fid1,open("C:/Python/sha_sub_hashes.out") as fid2,open("osMatches.txt", 'w') as outdata:
for xline,yline in zip(fid1,fid2): #zip fetches lines from both files one by one
xline= xline.split(',')[1] #use itertools.izip instead of zip if you're on python 2.x
yline = yline.split("|")[3]
zline = xline.replace('"','')
if yline == zline:
outdata.write("{0}{1}\n".format(yline , zline)) #use write to write the data back
if __name__=="__main__":
checkOS()
+0
如果使用python 2.x,请考虑使用'itertools.izip'来防止将这两个文件读入内存。 – mgilson 2012-07-09 17:22:18
你能给出一个来自每个文件的样本行,应该被认为是等效的或不等效的吗? – mVChr 2012-07-09 17:14:48
你有一个无限循环。 – mgilson 2012-07-09 17:17:04
而代码会在if中产生'AttributeError'。 – 2012-07-09 17:19:30