Передать переменную в read_csv в качестве аргумента?

Чтобы быть более удобным для пользователя, я создал приглашение для пользователя ввести путь к файлу.

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, он будет работать нормально. Может ли кто-нибудь просветить меня?

Не добавляйте «r» в начало входной строки. Кроме того, если вы используете Python 2.x, используйте raw_input вместо input, чтобы вам не приходилось вводить кавычки.

kindall 10.04.2019 23:04

также вам не хватает одной закрывающей скобки ")" в строке df = pd.DataFrame(pd.read_csv(path, index_col=False) или просто сделайте df = pd.read_csv(path, index_col=False)

BetaDev 10.04.2019 23:07

Почему вы вводите с кавычками: "C:\path\somefile.csv"? Просто уберите кавычки и не добавляйте r. Это не делает его необработанной строкой, это просто добавляет и р

juanpa.arrivillaga 10.04.2019 23:13

Я предлагаю вам узнать о разнице между "воспроизведением" строки и значением строки.

Code-Apprentice 10.04.2019 23:22

@juanpa.arrivillaga, не могли бы вы объяснить мне, почему вы должны использовать r перед путем в кавычках, когда вы вводите его как прямой аргумент, а не передаете через переменную?

Trace R. 10.04.2019 23:45

Потому что это необработанный строковый литерал. Это исходный код. Существует разница между исходным кодом и вашими данными. input принимает пользовательский ввод из стандартного потока ввода и возвращает его в виде строкового объекта. Строка литералы в исходном коде заключена в кавычки, но в самих данных кавычек нет.

juanpa.arrivillaga 11.04.2019 00:14

Спасибо, что многое проясняет.

Trace R. 11.04.2019 16:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
2 002
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы перепроектировали свой код. Это так просто:

print('Please enter file path without quotes.')
path = input()
df =pd.read_csv(path, index_col=False)

Вам не нужны кавычки, так как они будут добавлены автоматически

Я даже не думаю, что replace(r'\\','/') нужно

juanpa.arrivillaga 10.04.2019 23:14

работает, спасибо! Раньше у меня были проблемы с вводом путей к файлам, где r"some path" всегда исправлял проблему, поэтому я всегда использовал его без проблем. Это первый случай, когда это действительно вызвало проблему. Думаю, мне нужно больше исследовать его использование.

Trace R. 10.04.2019 23:29

Я думаю, вы путаете необработанные строковые литералы со строковым значением. Когда мы пишем что-то вроде

csv = pd.read_csv(r'C:\path\somefile.csv')

r'C:\path\somefile.csv' — это строковый литерал. Вот как мы представляем строку в коде питона. Пользователь никогда не должен знать об обозначении r'', включая как букву r, так и кавычки. Вместо этого они должны просто ввести путь, который они видят в других программах. Это означает, что вы можете просто сделать

path = input()

Также от пользователя не требуется вводить какие-либо кавычки.

Другие вопросы по теме