ValueError: invalid literal for int() with base 10: 'f'

ValueError: invalid literal for int() with base 10: 'f'

我一直在尝试遍历文本文件以在其他目录中创建一些具有相同名称但具有其他值的文本文件。这是代码

import numpy as np
import cv2, os
from glob import glob

path_in = 'C:/Users/user/labels'
path_out = 'C:/Users/user/labels_90'

for filename in os.listdir(path_in):
    if filename.endswith('txt'):
        filename_edited = []
        for line in filename:
            numericdata = line.split(' ')
            numbers = []
            for i in numericdata:
                numbers.append(int(i))
            c,x,y = numbers
            edited = [c, y, (19-x)]
            filename_edited.append(edited)
            filename_edited_array = np.array(filename_edited)

            cv2.imwrite(os.path.join(path_out,filename),filename_edited_array)

        continue
    else:
        continue

根据我的计划,代码应该访问每个文本文件,对其每一行进行一些数学计算,然后创建一个存储数学计算结果的文本文件。 当我 运行 代码时,它会引发

numbers.append(int(i))

ValueError: invalid literal for int() with base 10: 'f'

我试图寻找答案,但我认为它们不适合这种情况

编辑:我正在提供文本文件示例

0 16 6
-1 6 9
0 11 11
0 17 7
0 7 12
0 12 12
-1 19 4

那是因为 for line in filename 你不是在读取文件,而是在遍历包含文件名的字符串。

为了读取或写入文件,您必须打开它(并且可能在结束时关闭它操作)。

最好和最 pythonic 的方法是使用构造 with,它会在操作结束时自动关闭它:

import numpy as np
import cv2, os
from glob import glob

path_in = 'C:/Users/user/labels'
path_out = 'C:/Users/user/labels_90'

for filename in os.listdir(path_in):
    if filename.endswith('txt'):
        filename_edited = []
        # open the file in read mode
        with open(filename, 'r') as f:
            for line in f:
                numericdata = line.split(' ')
                numbers = []
                for i in numericdata:
                    numbers.append(int(i))
            # blah blah...
            # blah blah...