2016-07-22 3 views
0

Привет Я пытаюсь закончить этот небольшой фрагмент кода для изменения файлов CSV, я получил это далеко с некоторой помощью:CSV для определенных ячеек на нечетных строк по определенному столбцу

редактировать .. . Дополнительная информация.

В основном, что я хочу сделать, это внести небольшие изменения в файл csv в зависимости от проекта и родительской проблемы в JIRA. Python затем внесет изменения в файл csv, прежде чем он будет прочитан в JIRA - это вторая часть программы, на которую я даже не смотрел. Я только хочу изменить ячейки типа BOX-123 и оставить пустые. Но идея программы заключается в том, что я могу использовать ее для внесения небольших изменений в шаблон, который автоматически создаст некоторые проблемы в JIRA.

import os 
import csv 

project = 'Dudgeon' 
parent = 'BOX-111' 
rows = (1,1007) 

current = os.getcwd() 
filename = 'test.csv' 
filepath = os.path.join(os.getcwd(), filename) 
#print(current) 
#print(filename) 
print(filepath) 

with open(filepath, 'r') as csvfile: 
    readCSV = csv.reader(csvfile) 
    next(readCSV, None) 
    for row in readCSV: 
     print(row[16]) 
     row_count =sum(1 for row in readCSV) 
     print(row_count) 
with open(filepath, 'r') as infile, open('out.csv', 'w') as outfile: 
    outfile.write(infile.readline()) # write out the 1st line 
    for line in infile: 
      cols = line.strip().split(',') 
      cols[16] = project 
      outfile.write(','.join(cols) + '\n') 
with open('out.csv', 'r') as infile, open('out1.csv', 'w') as outfile: 
    for row in infile: 
     if row % 2 != 0: 
      cols [15] = parent 
     outfile.write() 

Любая помощь очень ценна.

+0

Гм ... что вы пытаетесь изменить его, чтобы сделать? Что это делает в настоящее время? Где конкретно это не подходит? Выдает ли ошибка? – Dan

+0

Подозрительная последняя строка: 'outfile.write()': разве вы не забыли '','. Join (cols) + '\ n''? И почему бы не использовать пакет csv для записи файла, так как вы уже используете его для чтения csv? –

+0

Вы читаете все строки с помощью 'csv.reader', чтобы получить количество строк, а затем снова итерации ** без **' csv.reader', когда вы обрабатываете данные (???). И снова без ЦСВ писать. Что тебе нужно сделать. Возможно, это можно сделать только в одной итерации. – chapelo

ответ

0

Вы хотите использовать индекс строки по сравнению с 0. Используйте enumerate():

with open('out.csv', 'r') as infile, open('out1.csv', 'w') as outfile: 
    for rowidx,row in enumerate(infile): 
     cols = row.strip().split(',') 
     if rowidx % 2 != 0: 
      cols[15] = parent 
     outfile.write(cols) 

Вы действительно должны использовать csv модуль здесь, хотя. Непроверенный, но вам нужно начать.

with open('out.csv', 'r') as infile, open('out1.csv', 'w') as outfile: 
    reader = csv.reader(infile) 
    writer = csv.writer(outfile) 
    for rowidx,row in enumerate(reader): 
     if rowidx % 2 != 0: 
      row[15] = parent 
     writer.write_row(row) 
0

Друг помог мне прошлой ночью, и это то, что они придумали:

with open(filepath, 'r') as infile, open('out.csv', 'w') as outfile: 
    outfile.write(infile.readline()) # write out the 1st line 
    for line in infile: 
     cols = line.strip().split(',') 
     cols[16] = project 
     outfile.write(','.join(cols) + '\n') 

with open('out.csv', 'r') as infile, open('out1.csv', 'w') as outfile: 
    outfile.write(infile.readline()) # write out the 1st line 
    lineCounter = 0 
    for line in infile: 
     lineCounter += 1 
     cols = line.strip().split(',') 
     if lineCounter % 2 != 0: 
      cols[15] = parent 
     outfile.write(','.join(cols) + '\n') 
Смежные вопросы