将Windows路径转换为Linux

2024-10-01 07:27:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我为模拟器创建的每个图像的文件路径创建了一个CSV文件(driving_log.csv),但我当时使用的是我哥哥的Windows计算机,所以现在每个图像的文件路径都是这样的(几乎有14000个)。从与CSV文件位于同一目录中的file.py调用它时,我收到一个错误

C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\center_2020_02_08_14_16_38_988.jpg,C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\left_2020_02_08_14_16_38_988.jpg,C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\right_2020_02_08_14_16_38_988.jpg,0,0,0,7.918889E-06

我正在使用ArchLinux。我想遍历每一行并将其更改为:

/home/onur/Documents/behavioral-cloning-CARLA/IMG/center_2020_02_08_14_16_38_988.jpg,left_2020_02_08_14_16_38_988.jpg,right_2020_02_08_14_16_38_988.jpg,0,0,0,7.918889E-06

正如你所看到的,我需要\IMG\之后的一切

最好的办法是什么?我应该在IMG\处对每个字符串进行切片,然后取后面的内容还是使用正则表达式

我已经为这一特定行尝试了此方法,以查看其是否有效,但没有:

string = r"C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\center_2020_02_08_14_16_38_988.jpg,C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\left_2020_02_08_14_16_38_988.jpg,C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\right_2020_02_08_14_16_38_988.jpg,0,0,0,7.918889E-06 "

new_string = string.replace(r"'C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\'", r"'/home/onur/Documents/behavioral-cloning-CARLA/IMG/'", 3)

print(new_string)

这是输出:

C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\center_2020_02_08_14_16_38_988.jpg,C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\left_2020_02_08_14_16_38_988.jpg,C:\Users\a-ozb\Desktop\onur\behavirol-cloning-carla\IMG\right_2020_02_08_14_16_38_988.jpg,0,0,0,7.918889E-06 

Tags: 文件图像rightimgstringleftusersjpg
1条回答
网友
1楼 · 发布于 2024-10-01 07:27:44

如果您在*nix机器上运行代码,则可以使用^{}类:

>>> from pathlib import PureWindowsPath, PurePosixPath
>>> path = PureWindowsPath('C:\\Users\\foo\\bar')

>>> path.parts
('c:\\', 'Users', 'foo', 'bar')

>>> PurePosixPath('/usr', *path.parts[2:])
PurePosixPath('/usr/foo/bar')

可以将字符串替换方法应用于文本文件中的每一行,如下所示:

with open("input.csv", "r") as f_in:
    with open("output.csv", "w") as f_out:
        for line in f_in:
            new_line = line.replace(...)  # magic goes here
            f_out.write("{}\n".format(new_line))

相关问题 更多 >