Чтобы быть более удобным для пользователя, я создал приглашение для пользователя ввести путь к файлу.
print('Please enter file path surrounded by quotes.')
path = 'r' + input()
df = pd.DataFrame(pd.read_csv(path, index_col=False))
Когда ввод
"C:\path\somefile.csv"
Выходные данные возвращаются
FileNotFoundError: [Errno 2] File b'r"C:\path\somefile.csv"' does not exist: b'r"C:\path\somefile.csv"'
Если я удалю переменную input и перетащу файл прямо в аргумент read_csv, он будет работать нормально. Может ли кто-нибудь просветить меня?
также вам не хватает одной закрывающей скобки ")" в строке df = pd.DataFrame(pd.read_csv(path, index_col=False)
или просто сделайте df = pd.read_csv(path, index_col=False)
Почему вы вводите с кавычками: "C:\path\somefile.csv"
? Просто уберите кавычки и не добавляйте r
. Это не делает его необработанной строкой, это просто добавляет и р
Я предлагаю вам узнать о разнице между "воспроизведением" строки и значением строки.
@juanpa.arrivillaga, не могли бы вы объяснить мне, почему вы должны использовать r перед путем в кавычках, когда вы вводите его как прямой аргумент, а не передаете через переменную?
Потому что это необработанный строковый литерал. Это исходный код. Существует разница между исходным кодом и вашими данными. input
принимает пользовательский ввод из стандартного потока ввода и возвращает его в виде строкового объекта. Строка литералы в исходном коде заключена в кавычки, но в самих данных кавычек нет.
Спасибо, что многое проясняет.
Вы перепроектировали свой код. Это так просто:
print('Please enter file path without quotes.')
path = input()
df =pd.read_csv(path, index_col=False)
Вам не нужны кавычки, так как они будут добавлены автоматически
Я даже не думаю, что replace(r'\\','/')
нужно
работает, спасибо! Раньше у меня были проблемы с вводом путей к файлам, где r"some path" всегда исправлял проблему, поэтому я всегда использовал его без проблем. Это первый случай, когда это действительно вызвало проблему. Думаю, мне нужно больше исследовать его использование.
Я думаю, вы путаете необработанные строковые литералы со строковым значением. Когда мы пишем что-то вроде
csv = pd.read_csv(r'C:\path\somefile.csv')
r'C:\path\somefile.csv'
— это строковый литерал. Вот как мы представляем строку в коде питона. Пользователь никогда не должен знать об обозначении r''
, включая как букву r
, так и кавычки. Вместо этого они должны просто ввести путь, который они видят в других программах. Это означает, что вы можете просто сделать
path = input()
Также от пользователя не требуется вводить какие-либо кавычки.
Не добавляйте «r» в начало входной строки. Кроме того, если вы используете Python 2.x, используйте
raw_input
вместоinput
, чтобы вам не приходилось вводить кавычки.