You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历文本文件生成同名文件时遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:23:04