python:在文本文件中查找并替换小于1的数字

6 投票
6 回答
6400 浏览
提问于 2025-04-15 21:53

我刚开始学习Python编程,遇到了一些问题,希望能得到帮助...

简单来说,我有多个文本文件,这些文件里包含了一些速度值,像这样:

0.259515E+03 0.235095E+03 0.208262E+03 0.230223E+03 0.267333E+03 0.217889E+03 0.156233E+03 0.144876E+03 0.136187E+03 0.137865E+00

等等,还有很多行...

我需要做的是把文本文件中所有小于1的值(比如上面提到的0.137865E+00)都替换成一个任意的值0.100000E+01。虽然用'replace()'方法和一个循环来替换特定值看起来很简单,但如果我想替换一系列的值,该怎么做呢?

谢谢

6 个回答

3

这段代码的意思是……

首先,它会做一些检查,看看输入的内容是否符合要求。如果不符合,就会给出错误提示。

接下来,它会处理这些输入,进行一些计算或者转换,最后输出结果。

整个过程就像是在做一道数学题,先检查条件,再进行计算,最后得出答案。

如果你对某些部分不太明白,可以随时问我哦!

def float_filter(input):
    for number in input.split():
        if float(number) < 1.0:
            yield "0.100000E+01"
        else:
            yield number

input = "0.259515E+03 0.235095E+03 0.208262E+03 0.230223E+03 0.267333E+03 0.217889E+03 0.156233E+03 0.144876E+03 0.136187E+03 0.137865E+00"
print " ".join(float_filter(input))
4

通常的做法是:

  • 逐行读取文件
  • 把每一行分割成一个字符串列表
  • 将每个字符串转换成浮点数
  • 把转换后的数值和1进行比较
  • 在需要的时候进行替换
  • 把结果写回到一个新文件中

因为我看到你还没有写任何代码,希望这些步骤能给你一个好的开始。

7

我觉得当你刚开始学习编程时,看到一些例子会很有帮助;我假设你已经先自己尝试过这个问题了!

下面是你可以尝试解决这个问题的一些步骤:

contents='0.259515E+03 0.235095E+03 0.208262E+03 0.230223E+03 0.267333E+03 0.217889E+03 0.156233E+03 0.144876E+03 0.136187E+03 0.137865E+00'

split方法是用在字符串上的。它会返回一个字符串列表。默认情况下,它会根据空格来分割字符串:

string_numbers=contents.split()
print(string_numbers)
# ['0.259515E+03', '0.235095E+03', '0.208262E+03', '0.230223E+03', '0.267333E+03', '0.217889E+03', '0.156233E+03', '0.144876E+03', '0.136187E+03', '0.137865E+00']

map命令会把第一个参数(函数float)应用到第二个参数的每一个元素上(这个参数是列表string_numbers)。float函数会把每个字符串转换成浮点数。

float_numbers=map(float,string_numbers)
print(float_numbers)
# [259.51499999999999, 235.095, 208.262, 230.22300000000001, 267.33300000000003, 217.88900000000001, 156.233, 144.876, 136.18700000000001, 0.13786499999999999]

你可以使用列表推导式来处理这个列表,把小于1的数字都变成1。条件表达式 (1 if num<1 else num) 的意思是:当num小于1时,它的值为1,否则就是num本身。

processed_numbers=[(1 if num<1 else num) for num in float_numbers]
print(processed_numbers)
# [259.51499999999999, 235.095, 208.262, 230.22300000000001, 267.33300000000003, 217.88900000000001, 156.233, 144.876, 136.18700000000001, 1]

这其实可以用一行代码来实现:

processed_numbers=[(1 if num<1 else num) for num in map(float,contents.split())]

要把processed_numbers中的元素合成一个字符串,你可以使用str.join方法

comma_separated_string=', '.join(map(str,processed_numbers))
# '259.515, 235.095, 208.262, 230.223, 267.333, 217.889, 156.233, 144.876, 136.187, 1'

撰写回答