Python CSV Writer обрезает ведущие нули - PullRequest
1 голос
/ 22 марта 2012

Я читаю в CSV-файле на Python, изменяю несколько значений и выписываю их обратно. Я прочитал в файле, используя:

bomReader = csv.reader( open( args.filename, 'rb' ), delimiter=',' )
for row in bomReader:
    #do stuff

Одно из полей содержит такие значения, как 0406, где важен начальный ноль. После прочтения файла CSV, если я распечатаю это поле с помощью, скажем, print row[2], оно отображается правильно с начальным 0.

Когда я записываю это обратно в мой новый CSV-файл, вывод не имеет начального нуля. Я предполагаю, что это потому, что он считается int, а ведущий ноль обрезается. Поскольку я не могу использовать спецификаторы формата в функции writeRow () csv.writer, как правильно предотвратить такое поведение?

Код:

bomReader = csv.reader( open( args.filename, 'rb' ), delimiter=',' )
bomWriter = csv.writer(open(outfile, 'wb'), delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)

for row in bomReader:
try:
    qty = int(row[3])
    if (qty > 0):
        cs = row[4].split(';')
        for each in cs:
            bomWriter.writerow([row[0],row[1], row[2],'1',each.strip(),row[5],row[6],row[7],row[8],row[9]])
    elif (qty == 0):
        print "Deleted line"
    else:
        bomWriter.writerow(row)
except ValueError:
        bomWriter.writerow(row)

Пример строки из входного CSV-файла:

1007,C,0406,2,C456;C219,ANY,,,,,,

Строки в выходном CSV-файле:

1007,C,406,1,C456,ANY,,,,
1007,C,406,1,C219,ANY,,,,

1 Ответ

1 голос
/ 22 марта 2012

Коды, которые вы указали, работают правильно, как вы хотите в Python 2.6.7 и Python 2.7.2, csv.__version=='1.0'. Выход:

1007,C,0406,1,C456,ANY,,,,
1007,C,0406,1,C219,ANY,,,,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...