import os root_dir = '/public/work/Personal/wuxu/qiantao_17' for parent, _, files in os.walk(root_dir): for file in files: if file.endswith('.report'): file_path = os.path.join(parent, file) with open(file_path, 'r') as f: lines = f.readlines() headers = lines[4].split()[4:41] data = [] for line in lines[5:]: row = line.split() data.append([float(row[1]), float(row[2])]) print(headers) for i in range(len(headers)): print(data[i]),运行代码后报错Traceback (most recent call last): File "/public/work/Personal/wuxu/test/shaixuan.py.new", line 15, in <module> data.append([float(row[1]), float(row[2])]) ValueError: could not convert string to float: '19(100.0000%)',修改上述代码
时间: 2024-02-14 21:07:55 浏览: 133
根据报错信息,发现无法将字符串转换为浮点数,具体是在将 row[1] 和 row[2] 转换为浮点数时发生了错误。根据代码逻辑,这两个位置分别应该是数字类型,因此可以猜测这里的字符串可能包含了一些非数字的字符。
经过观察发现,这个字符串是 '19(100.0000%)',其中包含了括号和百分号,因此无法直接转换为浮点数。解决这个问题的方法,可以使用正则表达式去掉括号和百分号,再进行转换。修改代码如下:
```
import os
import re
root_dir = '/public/work/Personal/wuxu/qiantao_17'
for parent, _, files in os.walk(root_dir):
for file in files:
if file.endswith('.report'):
file_path = os.path.join(parent, file)
with open(file_path, 'r') as f:
lines = f.readlines()
headers = lines[4].split()[4:41]
data = []
for line in lines[5:]:
row = line.split()
row[1] = re.sub(r'[()%]', '', row[1]) # 去掉括号和百分号
row[2] = re.sub(r'[()%]', '', row[2])
data.append([float(row[1]), float(row[2])])
print(headers)
for i in range(len(headers)):
print(data[i])
```
修改后的代码中,使用了 re.sub() 函数去掉了括号和百分号。其中,参数 r'[()%]' 表示要去掉的字符是括号和百分号。
阅读全文