Nano Hash - криптовалюты, майнинг, программирование

Почему Python 2.7.3 считает, что мой документ .csv состоит из одной строки?

Я новичок в программировании и столкнулся с проблемой в некоторых моих курсовых работах, в которой не могу разобраться. Рассмотрим воображаемый файл с именем «example.csv» со следующим содержимым.

Key1,Value1
Key2,Value2
Key3,Value3
...

Если я запускаю следующий код, он печатает каждую строку в файле, за которой следует одна звездочка в последней строке. Я ожидал, что он напечатает каждую строку, разделенную звездочкой.

infile = open("example.csv", "r")
for line in infile:
    print line.strip()
    print '*'
    #row_elements = line.split(",")
    #print row_elements

Кроме того, если я попытаюсь разделить строку на каждую запятую, удалив хэши в приведенном выше коде, я получу следующий вывод.

['Key1', 'Value1\rKey2', 'Value2\rKey3'...

Вместо передачи "\r" методу .split() вывод немного улучшается.

['Key1,Value1', 'Key2,Value2'...

Я до сих пор не понимаю, почему python считает, что весь файл находится в одной строке. У кого-нибудь есть понимание этого?


  • Он не думает, что это все на одном лайве, у вас окончания строк \r\n вместо \n. 07.03.2013
  • Нет, его строки заканчиваются на '\r'. Почему это должно быть? @ Джереми, какую ОС ты используешь? Какая программа создала файл CSV? 07.03.2013
  • Я все еще предполагаю, что это \r\n, потому что в первом примере вывода пробелы и \n отсутствуют. Попробуйте открыть файл в универсальном режиме с помощью open("example.csv", "rU") 07.03.2013
  • Роб, у меня mac OS X 10.5, но я думаю, что проблема возникла после того, как я отредактировал CSV-файл в Excel. Я попытался запустить программу с неотредактированной версией файла, и она сработала, как и ожидалось. Итак, я бы сказал, что Excel переформатировал его, когда я сохранил. 07.03.2013

Ответы:


1

В вашем файле в качестве разделителя строк используется \r (также известное как соглашение о новой строке "CR" или "Classic Mac"). Python open по умолчанию не занимается этим.

Вы можете использовать режим «универсальных новых строк» ​​(режим 'rU' в open), чтобы правильно открыть файл.

(Обратите внимание, что некоторые текстовые редакторы Mac по-прежнему используют \r в качестве разделителя строк, хотя, к счастью, сейчас они гораздо реже, чем несколько лет назад.)

07.03.2013
  • Это было очень полезно, и режим «rU» работал просто отлично. Спасибо! 07.03.2013

  • 2

    Ваш входной файл плохо отформатирован. В Linux строки разделяются '\n'. В Windows строки разделяются '\r\n', но в коде библиотеки времени выполнения '\r' исчезает.

    В вашем файле строки разделены '\r', что не является стандартом ни в одной современной операционной системе. Возможно, программа, которая создала файл, имеет какие-то недостатки.

    07.03.2013
  • Как я упоминал в комментариях к вопросу, виновником был Excel для Mac 2011. Спасибо за помощь. 07.03.2013

  • 3

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

    import csv
    with open("example.csv", "rb") as infile:
        reader = csv.reader(infile)
        for row in reader:
            print row # a list of items in your file
    

    Оператор with будет автоматически закрыт. файл для вас, когда вы выходите из блока операторов.

    07.03.2013
  • Верно, но это не отвечает на его вопрос и не решает его проблему. Ему все еще нужно открыть с помощью "U". Возможно, ваш ответ будет лучше в качестве комментария. 07.03.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..