为什么 pd.read_csv 不接受 windows 文件路径中的变量名?
Why won't pd.read_csv accept a variable name within the file path in windows?
我正在尝试将一个变量名放入文件路径中,以便在 windows 中使用 spyder 5、python 3.7.9 打开一个 csv。它在 raspberry pi 和 Ubuntu 上运行良好,但我无法弄清楚 windows 文件路径约定。下面的代码
import pandas as pd
#%%
needle_size = '14mm_'
Pressure = '5mb'
test_var = needle_size+Pressure
prelim = pd.read_csv('C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm\'+test_var+'.csv')
我收到屏幕左侧中间带有白色十字的红色圆圈的错误,上面写着
'EOL while scanning string literal pyflakes E'
对我来说也很奇怪的是,通常可以用作变量的文本在加号之间变成黑色,而不是当它是一个字符串时变成绿色。上例中.csv为黑色,其余为绿色,为什么?
此外,我尝试在路径前添加 r,在路径后添加 ,'rb',但是没有用。
文件路径中的 \
被误认为是转义字符。不幸的是,即使是原始字符串也不能以反斜杠 (\
) 字符结尾,因为结尾的引号仍会被转义。尝试分别定义您的路径和文件名,然后使用格式字符串将它们连接起来。
path = r"C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm"
filename = test_var + ".csv"
file_path = r"%s\%s" % (path, filename)
prelim = pd.read_csv(file_path)
\
被读取为转义序列的开头。您应该改用 f-string:
prelim = pd.read_csv(f'C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm\{test_var}.csv')
这当然是假设您使用的是 Python 3.6+。
您还可以将默认的 \
Windows 路径分隔符更改为 /
:
prelim = pd.read_csv('C:/Users/Edwardtx/Downloads/Tomsstuff/data_pp_kvals/test2/Inner/14mm/' + test_var + '.csv')
这会工作得很好,但你必须确保它不是原始字符串。
然而,真正 Pythonic 答案是使用 os.path
。例如:
>>> import os.path
>>> test_var = "foo"
>>> base_path = r"C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm"
# note the raw string and lack of trailing \
>>> full_path = os.path.join(base_path, test_var + ".csv")
>>> print(full_path)
'C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Inner\14mm\foo.csv'
os.path.join()
将其参数与 os.path.sep
连接起来,这是系统相关的。
您可以通过以下方式使用 f 字符串读取 CSV 文件
示例:
import pandas as pd
#%%
needle_size = '14mm_'
Pressure = '5mb'
test_var = needle_size+Pressure
prelim = pd.read_csv(f'C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm\{test_var}.csv')
我正在尝试将一个变量名放入文件路径中,以便在 windows 中使用 spyder 5、python 3.7.9 打开一个 csv。它在 raspberry pi 和 Ubuntu 上运行良好,但我无法弄清楚 windows 文件路径约定。下面的代码
import pandas as pd
#%%
needle_size = '14mm_'
Pressure = '5mb'
test_var = needle_size+Pressure
prelim = pd.read_csv('C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm\'+test_var+'.csv')
我收到屏幕左侧中间带有白色十字的红色圆圈的错误,上面写着
'EOL while scanning string literal pyflakes E'
对我来说也很奇怪的是,通常可以用作变量的文本在加号之间变成黑色,而不是当它是一个字符串时变成绿色。上例中.csv为黑色,其余为绿色,为什么?
此外,我尝试在路径前添加 r,在路径后添加 ,'rb',但是没有用。
文件路径中的 \
被误认为是转义字符。不幸的是,即使是原始字符串也不能以反斜杠 (\
) 字符结尾,因为结尾的引号仍会被转义。尝试分别定义您的路径和文件名,然后使用格式字符串将它们连接起来。
path = r"C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm"
filename = test_var + ".csv"
file_path = r"%s\%s" % (path, filename)
prelim = pd.read_csv(file_path)
\
被读取为转义序列的开头。您应该改用 f-string:
prelim = pd.read_csv(f'C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm\{test_var}.csv')
这当然是假设您使用的是 Python 3.6+。
您还可以将默认的 \
Windows 路径分隔符更改为 /
:
prelim = pd.read_csv('C:/Users/Edwardtx/Downloads/Tomsstuff/data_pp_kvals/test2/Inner/14mm/' + test_var + '.csv')
这会工作得很好,但你必须确保它不是原始字符串。
然而,真正 Pythonic 答案是使用 os.path
。例如:
>>> import os.path
>>> test_var = "foo"
>>> base_path = r"C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm"
# note the raw string and lack of trailing \
>>> full_path = os.path.join(base_path, test_var + ".csv")
>>> print(full_path)
'C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Inner\14mm\foo.csv'
os.path.join()
将其参数与 os.path.sep
连接起来,这是系统相关的。
您可以通过以下方式使用 f 字符串读取 CSV 文件
示例:
import pandas as pd
#%%
needle_size = '14mm_'
Pressure = '5mb'
test_var = needle_size+Pressure
prelim = pd.read_csv(f'C:\Users\Edwardtx\Downloads\Tomsstuff\data_pp_kvals\test2\Innermm\{test_var}.csv')