【问题标题】:Python: Save element by element from inputPython:从输入中逐个元素保存
【发布时间】:2017-01-25 13:41:20
【问题描述】:

我有一个输入文件如下

0.1 #real number
0.2 #real number
Hello #string
10000 #integer number

我想阅读它并在我的代码中使用“#”符号之前的每一行。第二部分我做了

with open('input.dat') as f:
    for line in f:
        line = line.split('#', 1)[0]
        line = line.rstrip()
        print(line) #test print
f.close()

在这种情况下,我可以读取和打印“#”符号之前的数字/字符串,但是保存它们呢? 例如,如果我想将 'Hello' 保存在一个名为 'name' 的字符串中,将 '0.1' 保存为一个名为 'min' 的实数等等。 我发现读取 input.dat 文件并根据需要保存元素的最简单方法是

with open('input.dat') as f:
    lines = f.readlines()
f.close()

min=lines[2] # it print me: "0.1 #real number"

但是只有min=0.1,我怎样才能获得读取和保存程序?我是python的菜鸟,所以也许我缺乏基础知识。

非常感谢

【问题讨论】:

    标签: python string file input


    【解决方案1】:

    你已经拥有了所有的碎片,你只需要把它们放在正确的地方:

    def remove_comment(line):
        line = line.split('#', 1)[0]
        line = line.rstrip()
        return line
    
    with open('input.dat') as f:
        lines = [remove_comment(line) for line in f]
    
    # no need for this: "with" takes care of it: # f.close()
    
    min=lines[2]
    

    【讨论】:

      【解决方案2】:

      一种方法是将结果存储在一个数组中。接下来要做什么将取决于您的输入的结构:它是否总是只包含这些类型的四个值并按此顺序排列?

      values = []
      with open('input.dat') as f:
          for line in f:
              value = line.split('#', 1)[0]
      
              if value.isdigit():
                  values.append(int(value))
              else:
                  try:
                      values.append(float(value))
                  except ValueError:
                      values.append(value)
      

      如果值始终按该顺序出现,则可以执行以下操作:

      n_min, n_max, name, big_number = values
      

      (注意:尽量避免命名变量minmax 或其他内置关键字,因为这可能会在以后引起问题!)

      【讨论】:

        猜你喜欢
        • 2022-12-30
        • 2019-05-20
        • 2015-11-19
        • 2023-03-05
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 2018-09-09
        • 2015-03-16
        相关资源
        最近更新 更多