遍历文本文件生成同名文件时遇ValueError:int()转换'f'失败,求解决
解决ValueError: invalid literal for int() with base 10: 'f'的问题
哎,这个错误我之前也踩过坑!核心问题一眼就能看出来——你把文件名当成文件内容来遍历了!
看这段代码:
for line in filename:
filename是字符串类型的文件名(比如"sample.txt"),遍历它的话,每次拿到的line是单个字符(比如's'、'a'、'm'、'p'、'l'、'e'这些),当你对这些字符执行split(' '),得到的还是原字符的列表,接着尝试把字符'f'转成int,这不就触发ValueError了嘛!
修正后的完整代码
我帮你把代码改好了,加上了必要的路径处理和异常防护,你可以直接参考:
import numpy as np import cv2, os from glob import glob path_in = 'C:/Users/user/labels' path_out = 'C:/Users/user/labels_90' # 先确保输出目录存在,避免创建文件时报错 os.makedirs(path_out, exist_ok=True) for filename in os.listdir(path_in): # 匹配后缀为.txt的文件,加上点避免误匹配 if filename.endswith('.txt'): # 拼接完整的输入、输出文件路径 input_file = os.path.join(path_in, filename) output_file = os.path.join(path_out, filename) processed_lines = [] # 打开输入文件读取内容 with open(input_file, 'r') as f: # 这里才是遍历文件的每一行内容 for line in f: # 去掉换行符和首尾空格,跳过空行 clean_line = line.strip() if not clean_line: continue # 分割行内的数值 numeric_parts = clean_line.split(' ') numbers = [] for part in numeric_parts: # 确保是数字再转换,避免文件内有异常内容 if part.strip().isdigit(): numbers.append(int(part)) # 假设每行是c,x,y三个数值,先判断长度避免索引错误 if len(numbers) == 3: c, x, y = numbers # 这里替换成你自己的内容编辑逻辑(比如90度旋转的坐标计算) # 举个示例:假设是归一化坐标的90度旋转调整 edited_c = c edited_x = y edited_y = 1 - x # 拼接成处理后的行 processed_lines.append(f"{edited_c} {edited_x} {edited_y}") # 将处理后的内容写入输出文件 with open(output_file, 'w') as f: f.write('\n'.join(processed_lines))
几个关键的优化点
- 用
os.path.join拼接路径:避免Windows和Linux路径分隔符的问题,代码更通用 - 提前创建输出目录:
os.makedirs(..., exist_ok=True)确保目录存在,不会因为目录未创建而报错 - 跳过空行+数字校验:防止文件里的空行或异常字符导致转换失败,代码更健壮
- 明确区分文件名和文件内容:这就是解决你当前错误的核心
内容的提问来源于stack exchange,提问作者bit_scientist
相关产品推荐
相关产品推荐

