дизайн сайта / логотип © 2024 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2024.11.26.40833 Каждая строка, возвращаемая объектом reader , представляет собой список значений типа String , содержащих данные с удаленными разделителями. Для данных CSV и JSON мы можем использовать специальные функции, предоставляемые Python для записи данных в файл после его открытия.
Запись списка в файл средствами Python
Является ли это самым чистым способом записи списка в файл, так как writelines() не вставляет символы newline?
Я пытаюсь создать csv файл, который содержит содержимое списка строк в Python, с помощью скрипта ниже. Однако когда я проверяю свой выходной файл, то получается, что каждый символ разграничивается запятой. Как я могу инструктировать csv.writer по делимитации каждой отдельной строки в пределах.
Если же вас увлекает однократный вызов функции, хотя бы уберите квадратные скобки [] , так чтобы строки, которые нужно напечатать, попадали по одной за раз (родитель, а не listcomp) — незачем занимать всю память, необходимую для материализации целого списка строк.
Что вы собираетесь делать с файлом? Существует ли этот файл для людей, или других программ с явными требованиями к интероперабельности?
Если вы просто пытаетесь сериализовать список на диск для последующего использования тем же питоновским приложением, вам следует pickleing списка.
Вы могли бы добиться того, чтобы все элементы в item list были строками, используя генераторное выражение:
Помните, что все itemlist list’ы должны быть в памяти, поэтому, позаботьтесь о потреблении памяти.
Используя Python 3 и Python 2.6+ синтаксис:
Это платформонезависимо. Он также завершает финальную строку символом newline, который является а-ля UNIX best practice.
Начиная с Python 3.6, «\n».format(item) можно заменить f-строкой: f»\n» .
Yet another way. Сериализуйте в json с помощью simplejson (входит в состав json в python 2.6):
Это полезно потому, что синтаксис питонический, это человекочитаемо, и его могут читать другие программы на других языках.
Я подумал, что было бы интересно изучить преимущества использования генеплова, поэтому вот мой take.
В примере в вопросе используются квадратные скобки для создания временного списка, а так эквивалентно:
который без надобности строит временный список из всех строк, которые будут выписаны, по этому может потребляться значительные объемы памяти в зависимости от размера вашего списка и насколько многословен вывод str(item) .
Сериализуйте list в текстовый файл с разделенным значением запятой


Программирование на Python: от начала к практике» Глава 10 Файлы и исключения — Русские Блоги
In General
Следствием является синтаксис для writelines() метода
Так же можно использовать функцию print, если вы на python3 следующим образом.
В python>3 можно использовать print и * для распаковки аргумента:
Эта логика сначала будет преобразовывать элементы в list в string(str) . Иногда list содержит кортеж вроде
Эта логика будет писать в файл каждый кортеж в новой строке. Мы можем позже использовать eval при этом загружая каждый кортеж при чтении файла:
Он сохраняет дамп списка так же как и список, когда мы его загружаем мы сможем прочитать.
Так же по simplejson возможно так же как выше output
Переадресация stdout в файл, возможно, тоже пригодится для этой цели:
В Python3 можно использовать вот такой loop
Вы можете использовать %e или %s в зависимости от вашего требования.
Приведенный выше пример есть из книги «A Byte of Python» by Swaroop C H. swaroopch.com

Вместо того, чтобы иметь дело со списком значений типа String , вы можете считывать данные непосредственно в словарь (технически в объект класса Ordered Dictionary). Обратите внимание, что поскольку имена столбцов изменены, данные в столбцах, измененных с помощью необязательных параметров index_col и parse_dates , также изменятся. Объект reader может обрабатывать файлы CSV с различными стилями форматирования, указывая значения необязательных параметров, некоторые из которых представлены ниже, а с остальными вы можете ознакомиться в документации перейдя по ссылке.
Открытие файла
Я предполагаю, что вы хотите открыть определенный файл, и вы не имеете дело непосредственно с дескриптором файла (или с дескриптором файла). Наиболее часто используемая функция для открытия файла в Python — open это один обязательный аргумент и два необязательных в Python 2.7:
Имя файла должно быть строкой, которая представляет путь к файлу . Например:
Обратите внимание, что необходимо указать расширение файла. Это особенно важно для пользователей Windows, поскольку такие расширения файлов, как .txt или .doc , и т. Д. По умолчанию скрыты при просмотре в проводнике.
Второй аргумент — mode это r по умолчанию, что означает «только для чтения». Это именно то, что вам нужно в вашем случае.
Но если вы действительно хотите создать файл и / или записать в файл, вам понадобится другой аргумент. Есть отличный ответ, если вы хотите обзор .
Для чтения файла вы можете опустить mode или передать его явно:
Оба откроют файл в режиме только для чтения. Если вы хотите прочитать в двоичном файле в Windows, вам нужно использовать режим rb :
На других платформах ‘b’ (двоичный режим) просто игнорируется.
Теперь, когда я показал, как с open файлом, давайте поговорим о том факте, что вам всегда это нужно close снова. В противном случае он будет хранить открытый дескриптор файла до тех пор, пока не завершится процесс (или Python не обработает дескриптор файла).
Это не удастся закрыть файл, когда что-то между open и close выдает исключение. Вы можете избежать этого, используя try и finally :
Однако Python предоставляет контекстные менеджеры, которые имеют более симпатичный синтаксис (но open он почти идентичен тому, что try и finally выше):
Последний подход — рекомендуемый подход для открытия файла в Python!


Как сохранить переменную в файл python
Чтение файла
open Функция возвращает file объект , и он поддерживает протокол итерации питонов. Каждая итерация даст вам строку:
Это напечатает каждую строку файла. Однако обратите внимание, что каждая строка будет содержать символ новой строки \n в конце (возможно, вы захотите проверить, построен ли ваш Python с поддержкой универсальной новой строки — в противном случае вы могли бы также использовать \r\n в Windows или \r на Mac новые строки). Если вы не хотите, вы можете просто удалить последний символ (или два последних символа в Windows):
Но последняя строка не обязательно имеет завершающий символ новой строки, поэтому не стоит ее использовать. Можно проверить, заканчивается ли он завершающим символом новой строки, и, если это так, удалить его:
Но вы можете просто удалить все пробелы (включая \n символ) в конце строки , это также удалит все другие конечные пробелы, поэтому вы должны быть осторожны, если они важны:
Однако, если строки заканчиваются \r\n (Windows, «новые строки»), .rstrip() это также позаботится о \r !
Содержание:





