Python 将Windows路径转换为Linux

Python 将Windows路径转换为Linux,python,regex,linux,windows,Python,Regex,Linux,Windows,我为模拟器创建的每个图像的文件路径创建了一个CSV文件(driving_log.CSV),但当时我使用的是我兄弟的Windows计算机,所以现在每个图像的文件路径都是这样的(几乎有14000个)。从我的文件.py调用它时出错,该文件与CSV文件位于同一目录中 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\b

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

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 

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

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

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))

您可能会发现标准模块有助于操作path.s
import ntpath
应提供Windows版本的
os.path
实用程序,即使在linux上也是如此。你可以从那里分割路径。看看我的尝试。@tdelaney但是我希望linux版本的路径和像
a-ozb
这样的文件在我的计算机上根本不存在。你尝试的问题是字符串文字中有额外的单引号。尝试以下操作:
new\u string=string.replace(“C:\\Users\\a-ozb\\Desktop\\onur\\behaviorl cloning carla\\IMG\”,“/home/onur/Documents/behavior cloning carla/IMG/”,3)
最后一个问题。如何迭代CSV文件中的每一行并应用
string.replace()
函数?我试图查找它,但我在网上找到的csv遍历器都会将到达行变成列表。如果不在解析列之后,则不需要使用
csv
模块。只需将各行作为字符串读取即可。我创建了一个名为
new drive log.csv
的新文件。如何将每个
新字符串写入新文件?我试着使用
csv.writer
,但没有完全起作用。正如我提到的,忘记
csv
模块,因为您对列不感兴趣。请参阅我的最新答案。
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))