如何创建列表来选择索引?

时间:2012-07-09 15:58:45

标签: python list indexing

我有这个代码来检查文件中的索引是否匹配,但是开始时我无法选择索引。为了能够这样做,我该怎么办,因为此时它不会将值显示在列表中。

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]时,我得到' " '。所以整个字符串中的第一个值,我希望列表能够选择索引。

4 个答案:

答案 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]:或您想要使用的任何逻辑。