Форум сайта python.su
Добрый день!
Решил освоить обработку данных в Python и столкнулся с трудностями.
Win7x86, Python33.
исходные файлы доступны для скачивания по следующим ссылкам
http://dl.dropbox.com/u/80844621/PyWinG.py - скрипт с ниже приведенным текстом
http://dl.dropbox.com/u/80844621/test.csv - исходный файл для обработки
Задача следующая.
Беру файл test.csv (разделитель ‘,’).
убираю строчку с названием столбцов.
import csv as csv test_file_object = csv.reader(open('test.csv', 'r')) header = test_file_object.__next__()
open_file_object = csv.writer(open('pyOne.csv', 'w')) for row in test_file_object: if row[2] == 'female': row.insert(0,'1') open_file_object.writerow(row) else: row.insert(0,'0') open_file_object.writerow(row)
Отредактировано TwoGOOse (Ноя. 16, 2012 11:46:54)
Прикреплённый файлы:
test.csv (26,0 KБ)
Офлайн
TwoGOOseДля работы с csv, файл нужно открывать с параметром newline='' (в Python 2.7 в бинарном режиме)
Как не писать пустые строки в выходной файл csv.
TwoGOOseДля этого нужно открывать файловый объект отдельно, передавать его в reader, а потом закрывать:
Как закрывать файл после запуска скрипта из IDLE, так как пока она запущена, файл доступен только на чтение.
csvfile = open('test.csv', newline='') reader = csv.reader(csvfile) ... csvfile.close()
with open('test.csv', newline='') as infile, open('pyOne.csv', 'w', newline='') as outfile: reader = csv.reader(infile) writer = csv.writer(outfile) for row in reader: ... writer.writerow(row)
Отредактировано reclosedev (Ноя. 16, 2012 10:40:25)
Офлайн
reclosedev
Или с помощью with (который закроет файл) как по ссылке выше:
Офлайн
reclosedev не указал кодировку при открытии файлов
TwoGOOseheader = infile.__next__()
header = next(infile)
header = infile.readline()
Офлайн
py.user.next
reclosedev не указал кодировку при открытии файлов
Офлайн
Отличаются они тем что методы __next__ и компания начинающиеся и заканчивающиеся с __ являются зарезервированными для внутреннего использования, их обычно дублируют встроенные функции такие как next и вызывать их явно зачастую не нужно. Кроме случаев, когда Вы четко знаете, что делаете.
Офлайн
TwoGOOse“import something as name” обычно используется для того, чтобы задать другое имя модулю, например, более короткое или совместимое с существующим кодом:
чем отличается import csv as csv от вашего import csv
import numpy as np
TwoGOOse__next__ - “низкоуровневый” метод, в коде лучше использовать:
не понял Ваших примеров.
Вместо моей строчки кода, вы предлагаете две альтернативы?
чем они отличаются?
какой лучше и почему?
header = next(reader) header = next(infile) header = infile.readline()
py.user.nextУ ТС тоже не было, а угадать сложно
reclosedev не указал кодировку при открытии файлов
Офлайн
reclosedevу него Python 3.3, а в третьем питоне для текстового режима её всегда нужно ставить
У ТС тоже не было, а угадать сложно
TwoGOOseлучше .readline() потому что import this
какой лучше и почему?
Отредактировано py.user.next (Ноя. 17, 2012 02:13:30)
Офлайн