将文件路径保存在变量中,稍后在函数中使用它

Save the File path in a variable and later use it in a function

提问人:RanjanN 提问时间:10/13/2023 更新时间:11/16/2023 访问量:118

问:

我正在尝试使用一个函数,该函数将记录文件路径作为输入并将其转换为 Pandas 数据帧

代码如下:

import pandas as pd
import numpy as np
from asammdf import MDF, Signal

def FileConverter(FilePath):
    DF01 = MDF(FilePath)
    DF01 = DF01.to_dataframe()
    return DF01

当我通过提供文件路径来使用上述代码时:

DF01 = FileConverter('C:\Users\hsr4ban\Desktop\Temp\DAT_to_DataFrame\Testing.dat')
print(DF01)

我收到以下错误:

Input In [79]
    DF01 = FileConverter('C:\Users\hsr4ban\Desktop\Temp\DAT_to_DataFrame\Testing.dat')
                                                                                      ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

但是,如果通过在路径的开头添加 r'' 或 '\' 来使用相同的代码,如下所示:

DF01 = FileConverter(r'C:\Users\hsr4ban\Desktop\Temp\DAT_to_DataFrame\Testing.dat')
DF01

DF01 = FileConverter('C:\\Users\hsr4ban\Desktop\Temp\DAT_to_DataFrame\Testing.dat')
DF01

问题解决了。

但是当我们从计算机复制文件链接时,链接如下所示: “C:\Users\hsr4ban\Desktop\Temp\DAT_to_DataFrame\Testing.dat”

想知道是否有办法仅粘贴从计算机复制的链接而不出现错误? 我尝试在网上搜索一些解决方案,但仍然找不到正确的解决方案。

任何建议都会很有帮助。

python-3.x 文件 路径

评论

3赞 Marco F. 10/13/2023
这回答了你的问题吗?我应该如何在 Python 字符串文字中编写 Windows 路径?
0赞 Dean Van Greunen 10/13/2023
您的路径应该是 或C:\\\\Users\\hsr4ban\\Desktop\\Temp\\DAT_to_DataFrame\\Testing.datC:/Users/hsr4ban/Desktop/Temp/DAT_to_DataFrame/Testing.dat
0赞 RanjanN 10/13/2023
@DeanVanGreunen:感谢您的反馈。当我们通过右键单击文件复制路径时,路径将如下所示:“C:\Users\hsr4ban\Desktop\Temp\DAT_to_DataFrame\Testing.dat” 如何将上述路径自动转换为您上面解释的格式?请提出建议。
1赞 RanjanN 10/13/2023
@MarcoF.:感谢您的反馈。正如我的问题中所解释的,在路径前添加 r' ' 或在路径中添加 '\\' 将解决问题。但是如何将路径转换为该格式呢?我无法在任何地方获取信息。此外,我已经尝试了您分享的链接中提到的那些建议。但它没有用。
0赞 cards 10/13/2023
你“不能”抓住一个,更多细节在这里。这意味着你不能动态地修改字符串,但你需要首先在python之外或预处理阶段的其他地方修改它SyntaxError

答:

1赞 Dean Van Greunen 10/13/2023 #1

只需将前缀添加到字符串中,即可将其转换为模式rraw

如:

使用原始字符串模式

mypath = r'C:\\Users\hsr4ban\Desktop\Temp\DAT_to_DataFrame\Testing.dat'

使用转义格式

mypath = 'C:\\\\Users\\hsr4ban\\Desktop\\Temp\\DAT_to_DataFrame\\Testing.dat'

使用 Linux 路径格式

mypath = 'C:/Users/hsr4ban/Desktop/Temp/DAT_to_DataFrame/Testing.dat'

评论

1赞 RanjanN 10/13/2023
可以自动向字符串添加 r 前缀吗?如果可能,请建议如何做到这一点?
1赞 aLbAc 10/13/2023
将文件路径保存到变量中,例如 FilePath,然后在开头添加“r”,例如FilePath = "r"+FilePath
2赞 cards 10/13/2023
@aLbAc问题是(在右边)会在字符串连接之前引发异常FilePath
1赞 aLbAc 10/13/2023 #2

我建议使用模块os。还将有助于使代码在不同的操作系统(Linux / Windows / MacOS)之间兼容。

import os

FilePath = os.path.join("C:", "Users", "hsr4ban", "Desktop", "Temp", "DAT_to_DataFrame", "Testing.dat")

然后将变量 FilePath 馈送到您的函数 FileConverter,这应该可以解决问题。

此外,您可以使用相同的 os 模块读取文件的完整路径。

path = "path/to/some/folder"
list_files = os.listdir()

在这种情况下,您应该执行如下操作:

path = os.path.join("C:", "Users", "hsr4ban", "Desktop", "Temp", "DAT_to_DataFrame")
list_files = os.listdir()
print(list_files)

这将生成一个列表,然后从中选择正确的列表。例如,如果您的文件位于第一个位置,并且需要文件的完整路径:

myfile = os.path.join(path,list_files[0])

评论

0赞 RanjanN 10/13/2023
感谢您的反馈。但是,如何拆分路径?你能建议吗?
0赞 aLbAc 10/13/2023
FilePath.split("\")括号中放置的内容是要用于拆分的字符。
0赞 aLbAc 10/13/2023
因此,如果您将两者合并在一起,并在两种情况下都使用操作系统,则可以执行如下操作FilePath = os.path.join(os.path.split(FilePath) )
0赞 RanjanN 10/13/2023
何时使用或何时使用。在这两种情况下,都得到Filepath.split("\")os.path.split(FilePath)SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
0赞 aLbAc 10/13/2023
尝试使用模块操作系统读取文件的完整路径,以避免出现奇怪的字符。path = "path/to/some/folder" list_files = os.listdir()
0赞 Vasyl Kolomiets 10/13/2023 #3

你的任务不是把你的思维方式束缚在Python上。你的任务是改变你的思维方式,以获得更好的 Python 编码。所以,首先,请告诉我,您将如何(或从何处)获取文件路径字符串?

>>> x = input('give me the path: ')
give me the path: C:\t\file_name.md5
>>> print(x)
'C:\\t\\file_name.md5'

变体 2 - 您将对其进行硬编码。所以写出“C:\t\file_name.md5”R

变体 3 - 从文件中读取。您将阅读如下行列表:

['C:\\t\\file_name.md5\n']

所以 - 停止硬编码 Windows 路径文字而不转发,你会很高兴。R

评论

1赞 RanjanN 10/16/2023
感谢您的反馈。它按预期工作。实际上,我试图探索将文件路径存储在变量中并将其用作函数中的输入的可能性。这可以通过使用功能来实现。input()
0赞 Vasyl Kolomiets 10/16/2023
这是你自己的成长!
0赞 Peter Mortensen 11/16/2023
R forward”“forward R”是什么意思?你能详细说明一下吗?
0赞 Vasyl Kolomiets 11/16/2023
@PeterMortensen R'C:\t\file_name.md5'