【问题标题】:How to create a list to select index?如何创建一个列表来选择索引?
【发布时间】:2012-07-09 01:44:27
【问题描述】:

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

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

【问题讨论】:

    标签: python list indexing


    【解决方案1】:

    尝试使用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() 删除空格)。如果引用的项目包含逗号,它也会失败,如 cmets 中所述。)

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      [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
      

      【讨论】:

        【解决方案4】:

        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 将从两个文件中读取第 1 行,然后是第 2 行,然后是第 3 行等(它会在文件中的最短行数处停止),然后从两个文件中读取第 2 行等...(不确定这是否是什么你想要的)。 row1 和 row2 最终将成为列列表,然后只需索引 if row1[0] == row2[0]: 或您希望使用的任何逻辑。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-14
          • 2020-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-08
          • 2015-02-21
          • 2019-02-27
          相关资源
          最近更新 更多