1

我有这段代码来检查文件中的索引以查看它们是否匹配,但开始时我无法选择索引。为了能够这样做,我必须做什么,因为此时它没有将值显示为列表中。

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

4 回答 4

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()删除空格来解决这个问题). 如果引用的项目包含逗号,它也会失败,如评论中所述。)

于 2012-07-09T16:04:12.873 回答
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
于 2012-07-09T16:05:00.470 回答
1

如果您尝试使用split()拆分每个逗号并返回第一个值?试试这个。

于 2012-07-09T16:06:49.150 回答
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...

Usingcsv.reader将比纯 str 方法更好地处理 CSV 格式的文件。izip将从两个文件中读取第 1 行、第 2 行、第 3 行等。)。row1 和 row2 最终将成为列列表,然后只是索引if row1[0] == row2[0]:或您希望使用的任何逻辑。

于 2012-07-09T16:13:10.033 回答