我对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()'方法和while循环替换特定值似乎很简单,但如果要替换范围,如何执行此操作?
谢谢
我想当你开始编程时,看一些例子很有用; 我假设你自己先尝试过这个问题!
以下是您如何解决这个问题的细分:
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'
Run Code Online (Sandbox Code Playgroud)
该分离方法适用于字符串.它返回一个字符串列表.默认情况下,它在空格上分割:
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']
Run Code Online (Sandbox Code Playgroud)
所述映射命令应用于第一个参数(函数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]
Run Code Online (Sandbox Code Playgroud)
您可以使用列表推导来处理列表,将小于1的数字转换为数字1. 当num小于1时,条件表达式 (1 if num<1 else num)等于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]
Run Code Online (Sandbox Code Playgroud)
所有这一切都在一条线上:
processed_numbers=[(1 if num<1 else num) for num in map(float,contents.split())]
Run Code Online (Sandbox Code Playgroud)
要从元素中生成字符串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'
Run Code Online (Sandbox Code Playgroud)