Преобразование CSV-файл в vCard в Python


Контекст: я написал просто как ответ на проблемы в ОС UNIX.ЮВ и было предложено мне, чтобы разместить его здесь для ознакомления.

Файл с разделителями-запятыми создается приложение. На первый столбец содержит фамилию, на второй имя, и на десятый столбец номер телефона. Для каждой строки Этот CSV запись vCard должен быть создан.

Это было мое решение:

#!/usr/bin/python

import csv
import sys

def convert(file):
    reader = csv.reader(open(file, 'rb'))

    for row in reader:
        print 'BEGIN:VCARD'
        print 'VERSION:2.1'
        print 'N:' + row[0] + ';' + row[1]
        print 'FN:' + row[1] + ' ' + row[0]
        print 'TEL;HOME;VOICE:' + row[9]
        print 'END:VCARD'

def main(args):
    if len(args) != 2:
        print "Usage:"
        print args[0] + " filename"
        return

    convert(args[1])

if __name__ == '__main__':
    main(sys.argv)

Вывод сгенерированного vCard на стандартный вывод был для меня нормально, я просто перенаправил его в соответствующий файл.



4777
6
задан 18 июля 2011 в 01:07 Источник Поделиться
Комментарии
4 ответа

Читайте о с заявлением и всегда использовать его с файл операции

with open( somefilename, 'rb' ) as source:
reader = csv.reader( source )
for row in reader:
etc.

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

5
ответ дан 18 июля 2011 в 09:07 Источник Поделиться

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

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

for row in reader:
print 'BEGIN:VCARD'
print 'VERSION:2.1'
print 'N:' + row[0] + ';' + row[1]
print 'FN:' + row[1] + ' ' + row[0]
print 'TEL;HOME;VOICE:' + row[9]
print 'END:VCARD'

Я рекомендую положить в что-то вроде

foo = row[0]

и тогда печать Foo, чтобы сделать его ясным, что различные значения.

3
ответ дан 18 июля 2011 в 04:07 Источник Поделиться

Даже для чего-то это тривиально, использовать argparse.

import argparse

parser = argparse.ArgumentParser(description='Convert a CSV or whatever.')
parser.add_argument('filenames', type=argparse.FileType('rb'), nargs='+',
help='a file to convert')

args = parser.parse_args()
for sourcefile in args.filenames:
convert( sourcefile )

3
ответ дан 18 июля 2011 в 09:07 Источник Поделиться

Питон руководство упоминает, что вы должны открыть файл с новой строки=" КШМ

Таким образом:

with open( somefilename, 'rb', newline='') as source:
etc

1
ответ дан 16 февраля 2013 в 10:02 Источник Поделиться