0

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

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
4

1 回答 1

1

那是因为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...
于 2018-03-30T09:57:57.250 回答