【问题标题】:Having trouble reading a file with numbers (strings) into a dictionary with integer values将带有数字(字符串)的文件读入带有整数值的字典时遇到问题
【发布时间】:2018-11-30 06:27:01
【问题描述】:

所以我有一个data.txt 文件,其中包含有关汽车的信息:

CAR|PRICE|RPM

TOYOTA|21,000|3,600

HONDA|19,000|4,000

通过将此数据文件传递给函数createCarDictionary,我能够创建一个字典,该字典将汽车品牌创建为键,并将值创建为 txt 文件中以列表形式存储的剩余信息:

dict1 = {}

def createCarDictionary(datafile):
    for line in datafile.splitlines():
        line = line.replace(',', '')
        key, value, value2 = map(str.strip, line.split('|'))
        dict1[key] = [value, value2]
    return dict1

datafile = open('data.txt', 'r').read()

createCarDictionary(datafile)
print(dict1)

输出

{'HONDA': ['19000', '4000'], 'TOYOTA': ['21000', '3600'], 'CAR': ['PRICE', 'RPM']}

我正在尝试使用上述函数中的 for 循环将 txt 文件中的数字转换为整数值,但由于标头 CAR|PRICE|RPMfor 循环 迭代的内容,因此出现错误第一次使我的程序崩溃,因为标题无法在任何地方转换为整数。

如何使用上面的函数将 RPM 和 PRICE 转换为 dict1 中的整数,同时避免并从最终结果中删除标题?

【问题讨论】:

    标签: python list file dictionary set


    【解决方案1】:

    您可以使用 isdigit 方法检查字符串是否仅由数字组成

    dict1 = {}
    def check_string_and_get_number(value):
        if value.isdigit():
           return int(value)
        else:
           return value
    def createCarDictionary(datafile):
        for line in datafile.splitlines():
            line = line.replace(',', '')
            key, value, value2 = map(str.strip, line.split('|'))
            value = check_string_and_get_number(value)
            value2 = check_string_and_get_number(value2)
            dict1[key] = [value, value2]
        return dict1
    
    datafile = open('data.txt', 'r').read()
    
    createCarDictionary(datafile)
    print(dict1)
    

    【讨论】:

      【解决方案2】:

      您可以在使用with 语句打开文件后使用next 跳过第一行。

      例如:

      dict1 = {}
      
      def createCarDictionary(datafile):
          with open(datafile) as infile:
              next(infile)  #Skip First Line
              for line in infile:
                  line = line.replace(',', '')
                  key, value, value2 = map(str.strip, line.split('|'))
                  dict1[key] = [value, value2]
              return dict1
      
      createCarDictionary('data.txt')
      print(dict1)
      

      【讨论】:

        【解决方案3】:

        您可以使用以下代码:

        dict1 = {}
        
        def createCarDictionary(datafile):
            for line in datafile.splitlines():
                line = line.replace(',', '')
                key, value, value2 = map(str.strip, line.split('|'))
                dict1[key] = [int(value), int(value2)]
            return dict1
        
        datafile = open('data.txt', 'r').read()
        
        createCarDictionary(datafile)
        print(dict1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-01
          • 2014-04-12
          • 2013-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多