我正在尝试接受用户的路径,然后在该路径中加载电子表格:
df_path = input('What is the file path?')
df = pd.read_csv(df_path, index_col=2)
有些用户在粘贴路径时会因为转义序列而被告知无效。此处,\166
正在转换为v
:
df_path = input('What is the file path?')
C:\ Data \ 166 - data \ data.csv #entered by user
df = pd.read_csv(df_path, index_col=2)
FileNotFoundError: [Errno 2] No such file or directory: "C:\\Datav - data\\data.csv"
我知道在代码中手动加载路径,这可以解释为:
dataset = pd.read_csv(r"C:\Data\166 - data\data.csv", index_col=2)
但是,在接受用户输入和将其存储为变量时,我无法找到一种方法来完成这项工作(尝试了多种尝试方法)所以,这里有一个例子):
df_path = input('What is the file path?')
" C:\ Data \ 166 - data \ data.csv" #entered by user
df = pd.read_csv("r'" + df_path, index_col=2)
OSError: [Errno 22] Invalid argument: "r'C:\\Datav - data\\data.csv"
尝试重写路径并将\
替换为\\
并不起作用:
df_path = df_path.replace("\", "\\")
SyntaxError: unexpected character after line continuation character
-
df_path = df_path.replace(r"\", r"\\")
SyntaxError: unexpected character after line continuation character
如何做到这一点?
答案 0 :(得分:1)
您正在将\166
变为v,您需要替换为\\166
它与r'\166'
一起使用的原因是因为你告诉解释器从字面上理解字符串。反斜杠字面上反斜杠。
在你的工作中,你在另一个字符串的前面添加了一个字符串"r'"
,这就是为什么它找不到目录"r'C:/"
。
简而言之,"r'string'"
与r'string'
不同,其中r在字符串引号之外。
这是原始字符串上的break down。
如果你在你的第二个代码块中将r添加到字符串的前面,你应该得到一个有效的解决方案,如下所示:
df_path = r"C:\Data\166 - data\data.csv"
或者用两个反斜杠写字符串会做同样的事情:
df_path = "C:\\Data\\166 - data\\data.csv"
答案 1 :(得分:0)
现在更清楚了。 Python 3.5是版本,代码是:
df_path = input('What is the file path?')
很明显为什么在错误时使用字符串进行测试。从文字中设置df_path会产生错误,您需要一个raw_string来避免该错误。
但是输入的数据应该与raw_string相同。无需转换。 用简单的程序测试:
a= "C:\Data\166 - data\data.csv" # the \ characters here will be mapped
b= r"C:\Data\166 - data\data.csv" # the r means \ will not be special
c= input("? ") # data from input is already treated like the r"\" above
print(a==c,b==c)
print(c)
使用python 3.5 Produces:
? C:\Data\166 - data\data.csv
False True
C:\Data\166 - data\data.csv
>>>
在空闲时,或在windows&cm;'中,在powershell或bash shell中(尽管该示例显然是针对windows),结果如上所述,输入等于r"& #34;串。这表明python的正常行为是将输入完全视为原始字符串,相当于使用r''在代码中。
所以可能是你的测试中你需要用r""来模拟raw_string,这是唯一的错误。
如果你说人们得到了' v'键入字符串时,这将是不同的东西。
您是说用户输入C:\Data\166 - data\data.csv
导致df_path打印为'C:\\Datav - data\\data.csv'
而不是打印为'C:\\Data\\166 - data\\data.csv'
的正确数据
或者只是你试图阻止这种情况发生,因为你认为会发生这种情况?
如果它确实发生了,问题不在于python本身。实际的控制台环境或正在运行程序的终端正在将自己的\ 166转换为转义字符,或者应用程序中的某些其他处理正在修改字符串。如果程序使用df_path = r'C:\Data\166 - data\data.csv'
代替输入,那么它只能是输入字符串的环境,或者输入本身已从标准python输入中更改。
但是我怀疑你在尝试用字符串中的设置替换input
时发现了一个错误,并试图围绕input
实际上不存在的问题进行编码,只是测试数据
注意:正如@GiantsLoveDeathMetal所解释的那样,一个python' rawstring'与r''在引号之前,通过python更改程序文件本身的读取。你不能用一个' r'在字符串中重现这是如何工作的。 r在引号之外,告诉python如何读取原始字符串,这都是在程序执行之前完成的。同样的规则也适用于f'' python 3.6中的字符串。
答案 2 :(得分:0)
我在复制问题时遇到了一些困难。也许可以添加额外的一行来查看它是否有帮助?
df_path = "C:\Data\166 - data\data.csv"
file_path = str(df_path)
df = pd.read_csv(file_path, index_col=2)