Чистый и 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ã.
Вы не можете читать и записывать один и тот же файл.
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
проблема в том, что вы пытаетесь записать в тот же файл, из которого читаете. записать в другой файл, а затем переименовать его после удаления оригинала.
Открывать файлы 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 является одним из них.