Запись со встроенным .csv модулем Python

Чистый и Pythonic способ чтения строк файла в список


Прежде всего, вы должны сосредоточиться на открытии файла и чтении его содержимого в эффективном и питонический способ. Вот пример того, как я лично НЕ предпочитаю:

infile = open('my_file.txt', 'r')  # Open the file for reading.

data = infile.read()  # Read the contents of the file.

infile.close()  # Close the file since we're done using it.

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

# Open the file for reading.
with open('my_file.txt', 'r') as infile:

    data = infile.read()  # Read the contents of the file into memory.

Теперь нам нужно сосредоточиться на переносе этих данных в список Python , потому что они повторяемы, эффективны и гибки. В вашем случае желаемая цель - перенести каждую строку текстового файла в отдельный элемент. Для этого мы будем использовать метод splitlines () следующим образом:

# Return a list of the lines, breaking at line boundaries.
my_list = data.splitlines()

Конечный продукт:

# Open the file for reading.
with open('my_file.txt', 'r') as infile:

    data = infile.read()  # Read the contents of the file into memory.

# Return a list of the lines, breaking at line boundaries.
my_list = data.splitlines()

Тестирование нашего кода:

  • Содержание текстового файла:
     A fost odatã ca-n povesti,
     A fost ca niciodatã,
     Din rude mãri împãrãtesti,
     O prea frumoasã fatã.
  • Печать операторов для тестирования:
    print my_list  # Print the list.

    # Print each line in the list.
    for line in my_list:
        print line

    # Print the fourth element in this list.
    print my_list[3]
  • Вывод (другой вид из-за символов Юникода):
     ['A fost odat\xc3\xa3 ca-n povesti,', 'A fost ca niciodat\xc3\xa3,',
     'Din rude m\xc3\xa3ri \xc3\xaemp\xc3\xa3r\xc3\xa3testi,', 'O prea
     frumoas\xc3\xa3 fat\xc3\xa3.']

     A fost odatã ca-n povesti, A fost ca niciodatã, Din rude mãri
     împãrãtesti, O prea frumoasã fatã.

     O prea frumoasã fatã.
7
задан Community 23 May 2017 в 10:29
поделиться

3 ответа

Вы не можете читать и записывать один и тот же файл.

source = open("PALTemplateData.csv","rb")
reader = csv.reader(source , dialect)

target = open("AnotherFile.csv","wb")
writer = csv.writer(target , dialect)

Обычный подход ко ВСЕМ манипуляциям с файлами заключается в создании измененной КОПИИ исходного файла. Не пытайтесь обновить файлы на месте. Это просто плохой план.


Править

В строках

source = open("PALTemplateData.csv","rb")

target = open("AnotherFile.csv","wb")

"rb" и "wb" абсолютно необходимы. Каждый раз, когда вы их игнорируете, вы открываете файл для чтения в неправильном формате.

Вы должны использовать «rb» для чтения файла .CSV. В Python 2.x выбора нет. В Python 3.x вы можете опустить это, но использовать «r» явно, чтобы прояснить это.

Вы должны использовать «wb» для записи файла .CSV. В Python 2.x выбора нет. В Python 3.x вы должны использовать «w».


Изменить

Похоже, вы используете Python3. Вам нужно будет убрать букву «b» с «rb» и «wb».

Прочтите это: http://docs.python.org/3.0/library/functions.html#open

10
ответ дан 6 December 2019 в 12:53
поделиться

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

2
ответ дан 6 December 2019 в 12:53
поделиться

Открывать файлы csv как двоичные просто неправильно. CSV - это обычные текстовые файлы, поэтому их нужно открывать с помощью

source = open("PALTemplateData.csv","r")
target = open("AnotherFile.csv","w")

. ​​Ошибка

_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

возникает из-за того, что вы открываете их в двоичном режиме.

Когда я открывал Excel CSV с помощью python, я использовал что-то вроде:

try:    # checking if file exists
    f = csv.reader(open(filepath, "r", encoding="cp1250"), delimiter=";", quotechar='"')
except IOError:
    f = []

for record in f:
    # do something with record

и он работал довольно быстро (я открывал два CSV-файла размером примерно 10 МБ каждый, хотя делал это с python 2.6, а не с версией 3.0).

Есть несколько рабочих модулей для работы с CSV-файлами Excel изнутри Python - pyExcelerator является одним из них.

4
ответ дан 6 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: