我有这个代码来检查文件中的索引是否匹配,但是开始时我无法选择索引。为了能够这样做,我该怎么办,因为此时它不会将值显示在列表中。
def checkOS():
fid = open("C:/Python/NSRLOS.txt", 'r')
fhand = open("C:/Python/sha_sub_hashes.out", 'r')
sLine = fhand.readline()
line = fid.readline()
outdata = []
print line
checkOS()
现在打印:
"190","Windows 2000","2000","609"
我只想打印:(所以index[0]
)
190
当我尝试index[0]
时,我得到' " '
。所以整个字符串中的第一个值,我希望列表能够选择索引。
答案 0 :(得分:5)
尝试使用line.split(",")
用逗号分隔行,然后通过切片结果去除引号。
示例:
>>> line = '"190","Windows 2000","2000","609"'
>>> sliced = line.split(',')
>>> print sliced
['"190"', '"Windows 2000"', '"2000"', '"609"']
>>> first_item = sliced[0][1:-1]
>>> print first_item
190
......这就是整个事情,被抽象成一个函数:
def get_item(line, index):
return line.split(',')[index][1:-1]
(当然,这是假设行中的所有项目都用逗号分隔,它们都用引号括起来,逗号后面没有空格(尽管你可以通过这样做来处理) item.strip()
删除空格。如果引用的项目包含逗号,它也会失败,如评论中所述。)
答案 1 :(得分:1)
[0]
仅返回第一个字符。
您想要逗号分隔列表的第一项。您可以编写自己的解析代码,也可以使用已处理此问题的csv
模块。
import csv
def get_first_row(fname):
with open(fname, 'rb') as inf:
incsv = csv.reader(inf)
try:
row = incsv.next()
except StopIteration:
row = [None]
return row
def checkOS():
fid = get_first_row("C:/Python/NSRLOS.txt")[0]
fhand = get_first_row("C:/Python/sha_sub_hashes.out")[0]
print fid
答案 2 :(得分:1)
如果您尝试使用split()
拆分每个逗号并返回第一个值?试试这个。
答案 3 :(得分:1)
csv.reader
将是一个良好的开端。
import csv
from itertools import izip
with open('file1.csv') as fid, open('file2.csv') as fhand:
fidcsv = csv.reader(fid)
fhandcsv = csv.reder(fhand)
for row1, row2 in izip(fidcsv, fhandcsv):
print row1, row2, row[1] # etc...
使用csv.reader
将比纯str方法更好地处理CSV格式的文件。 izip
将从两个文件中读取line1然后是2,然后是3等...(虽然它将停在文件中最短的行数),然后是来自两个文件的line2等...(不确定是否这样是你想要的)。 row1和row2将最终成为列的列表,然后只是索引if row1[0] == row2[0]:
或您想要使用的任何逻辑。