Форум сайта python.su
В рамках изучения языка поставил себе практически полезную задачку.
Дан файл CSV с таблицей:
В первом столбце фамилии сотрудников с инициалами. Во втором столбце указывается время прихода сотрудника на работу, в третьем время ухода.
ФИО Первый приход Последний уход
Boscolo L.
Munhos de Campos E.
Абашидзе А.А.
.
.
.
Андросова А.Ю. 10.02.2014 14:09 16.04.2014 15:48
.
Записей в таблице больше 1000, необходимо выбрать из таблицы только те строки, в которых есть время прихода и ухода (их штук 10-15 из тысячи).
Нашёл модуль CSV, для работы с файлами данного формата, но не всё идёт гладко.
В планах выбирать подходящие под условие строки (есть значения в трёх колонках(фио, время прихода, время ухода) и записывать их в новый CSV файл.
Для начала решил попытаться записать все строки из входящего файла в новый
import csv input_file = open('testcsv.csv','rt') reader = csv.reader(input_file) output_file = open('output.csv','wt') writer = csv.writer(output_file) for row in reader: writer.writerow(row)
if int(row) == 1000: break
Отредактировано coffe4wolf (Апрель 22, 2016 11:14:30)
Офлайн
coffe4wolf
1)
for n, row in enumerate(reader, 1): if n == 1000: break
len(row) вместо int(row)
Отредактировано sander (Апрель 22, 2016 11:39:31)
Офлайн
sander
Огромное спасибо, с этим разобрался. Заодно вспомнил, что записываемый файл нужно закрывать после работы ) Кстати возник вопрос - читаемый файл сам закрывается кода к нему заканчиваются обращения?
Офлайн
coffe4wolf
да, когда нибудь закроется, но лучше использовать менеджеры контекста
with open("filename") as f: # do something # file opened выход из менеджера # file closed
Офлайн
Всё по работе с форматом CSV, можно найти здесь
Офлайн
sander
Переписал с использованием менеджеров контекста
with open('testcsv.csv','rt') as input_file: reader = csv.reader(input_file) for row in reader: if len(row) != None: with open('output.csv','wt') as output_file: writer = csv.writer(output_file) writer.writerow(row) else: break output_file.close()
with open('testcsv.csv','rt') as input_file:
reader = csv.reader(input_file)
for row in reader:
if len(row) != None:
print(row)
else:
break
Отредактировано coffe4wolf (Май 10, 2016 14:47:05)
Офлайн
coffe4wolf
1) len(что то там) никогда не будет = None
2) writer.writerow ждет на вход список строк, а не строку
3) вынеси создание файла “output_file” из цикла
Офлайн
1. Можно сделать вот так:
with open('testcsv.csv','rt') as input_file, open('output.csv', 'w') as output_file: ...
output_file.close()
Отредактировано r00tl3ss (Май 10, 2016 15:45:32)
Офлайн
coffe4wolf
Дан файл CSV с таблицей:
coffe4wolfформально это не csv файл поскольку разделители не запятые.
Абашидзе А.А.
Андросова А.Ю. 10.02.2014 14:09 16.04.2014 15:48
import re print(re.findall("^.+\d$",open("a.txt").read(), re.M))
Офлайн
doza_and
[code python]
print(re.findall("^.+\d$",open("a.txt").read(), re.M))
[/code]
Офлайн