【问题标题】:using data from a txt file in python在 python 中使用 txt 文件中的数据
【发布时间】:2011-12-14 16:40:24
【问题描述】:

我正在学习 python,现在在阅读和分析 txt 文件时遇到了一些问题。我想在 python 中打开一个包含多行的.txt 文件,并且在每一行中我有一个水果和它的价格。

我想知道如何让 python 将它们的价格识别为一个数字(因为当我使用 readlines() 时它识别为一个字符串)所以我可以在一些简单的函数中使用这些数字来计算我的最低价格必须卖掉果实才能获得利润。

有什么想法吗?

【问题讨论】:

  • 您能否为您的输入文件提供一些示例行?你的格式规范很模糊。
  • 不是。这很好理解。有一个文本文件,每一行都有两个空格分隔的值:一个字符串和一个数字。他希望 Python 将第二个字段读取为数字而不是字符串。
  • @H2CO3:你怎么知道它是空间分离的? aix 将其解释为逗号分隔。它也可能是从 Excel 导出的 CSV 文件,所以我们必须处理引号之类的。
  • 对不起,你是对的。我没有仔细阅读它......

标签: python string text-files


【解决方案1】:

如果名称和价格用逗号分隔:

with open('data.txt') as f:
  for line in f:
    name, price = line.rstrip().split(',')
    price = float(price)
    print name, price

【讨论】:

  • 很抱歉,我知道我说得很含糊,但你真的帮了我很多,谢谢 =)
【解决方案2】:

假设您的值是用空格分隔的,您可以使用以下命令将文件读入元组列表:

# generator to read file and return each line as a list of values
pairs = (line.split() for line in open("x.txt"))  
# use list comprehension to produce a list of tuples
fruits = [(name, float(price)) for name, price in pairs] 

print fruits
# will print [('apples', 1.23), ('pears', 231.23), ('guava', 12.3)]

请注意,float() 用于将第二个值 (price) 从 str 转换为浮点数。

另请参阅:list comprehensiongenerator expression


为了方便查找每种水果的价格,您可以将元组列表转换为字典:

price_lookup = dict(fruits)

print price_lookup["apples"]
# will print 1.23

print price_lookup["guava"] * 2
# will print 24.6

请参阅:dict()

【讨论】:

    【解决方案3】:

    当我第一次从 Perl 学习 Python 时,我遇到了同样的问题。 Perl 将“按你的意思做”(或者至少是它认为你的意思),并在你尝试像数字一样使用它时自动将看起来像数字的东西转换为数字。 (我在概括,但你明白了)。 Python 的哲学是不要发生这么多的魔法,所以你必须明确地进行转换。调用float("12.00")int("123") 从字符串转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多