2016-03-23 4 views
-1

У меня есть файл в формате CSV (фото): enter image description herePython- Невозможно перезаписать первый столбец CSV-файл с новым отметкой времени

В изображении есть время колонка с датой и время строки, у меня есть программа, которая принимает этот столбец и только считывает время H: M: S. Тем не менее, не только в моей программе я пытаюсь взять столбец, чтобы читать только метку времени H: M: S, но я также пытаюсь перезаписать столбец времени первого файла и заменить его только на H: M: S на новый .csv со следующим кодом.

КОД:

import csv 
import datetime as dt 
import os 

File = 'C:/Users/Alan Cedeno/Desktop/Test_Folder/HiSAM1_data_160215_164858.csv' 
root, ext = os.path.splitext(File) 
output = root + '-new.csv' 
with open(File,'r') as csvinput,open(output, 'w') as csvoutput: 

    writer = csv.writer(csvoutput, lineterminator='\n') 
    reader = csv.reader(csvinput) 

    all = [] 
    row = next(reader) 
    for line in reader: 
     row.append(dt.datetime.strptime(line[0],'%m/%d/%Y %H:%M:%S').time()) 
     all.append(row) 

    for row in reader: 
     row.append(row[0]) 
     all.append(row) 

    writer.writerows(all) 

Программа работает и принимает строки даты-времени и перезаписывает строку с отметкой времени H: M: S в новом файле .csv. Однако вот проблема: выходной файл вместо замены столбца времени, который он заменил, каждый столбец получает выходной файл, который выглядит так. См 2-ое изображение:

enter image description here

На данный момент я не»т действительно знают, как сделать новый выходной файл, чтобы посмотреть, как файл первого изображения, с форматом H: M: S в первом столбец ТОЛЬКО, не все скремблировано, как на втором изображении. Какие-либо предложения?

БРОУЗЕРЕ enter image description here ДЛЯ ПАГ:

См столбец K, он должен быть столбец А первого изображения, а столбцы В, С, D, Е, F, G, I и J должны оставаться той же как в изображении 1.

Скачать LInk из CSV-файла: http://www.speedyshare.com/z2jwq/HiSAM1-data-160215-164858.csv

+0

Прежде всего, это выглядит, как вам не нужно ваш второй цикл.В первом цикле for вы добавляете строку, которая определяется как первая строка читателя. – Bahrom

+0

@Bah Я изменил строку [0] на строку [1], и что это значит, что он больше не читает столбца времени, который является первым столбцом, а столбец 0.3/L, который является вторым столбцом. Поэтому я не могу изменить строку [0] на другое значение. Может быть, я не понимаю, что вы говорите ... – dontbadick

+0

попробуйте полностью прокомментировать ваш второй цикл и изменив тело первого цикла (из row.append ...; all.append) в эту строку: 'all.append (строка + [dt.datetime.strptime (строка [0], '% m /% d /% Y% H:% M:% S'). time()]) '(захватить последнее редактирование, я забыл скобки раньше) – Bahrom

ответ

2

Основная проблема с кодом, кажется, что ты хранишь, добавляя к первой строке времени каждому из строки в CSV, который приводит во втором изображении, размещенном в вопрос.

Идея состоит в том, чтобы отслеживать разные строки и изменять только первый элемент каждой строки. Кроме того, если вы хотите, вы должны сохранить первую строку, которая указывает метки столбца. Для решения этого вопроса, код будет выглядеть следующим образом:

import csv 
import datetime as dt 
import os 

File = 'C:/Users/Alan Cedeno/Desktop/Test_Folder/HiSAM1_data_160215_164858.csv' 
root, ext = os.path.splitext(File) 
output = root + '-new.csv' 
with open(File,'r') as csvinput,open(output, 'w') as csvoutput: 

    writer = csv.writer(csvoutput, lineterminator='\n') 
    reader = csv.reader(csvinput) 

    rows = [next(reader)] 
    for line in reader: 
     line[0] = str(dt.datetime.strptime(line[0],'%m/%d/%Y %H:%M:%S').time()) 
     rows.append(line) 

    writer.writerows(rows) 

Обратите внимание на список rows имеет измененные строки из csvinput.

Результирующий выходной файл в формате CSV (протестирован с первой линией в вопросе дублируется) будет enter image description here

+0

большое спасибо! я вижу, что я испортил! – dontbadick

0

с некоторыми упрощенными данными:

#!python3 
import csv 
import datetime as dt 
import os 

File = 'data.csv' 
root, ext = os.path.splitext(File) 
output = root + '-new.csv' 

# csv module documents opening with `newline=''` mode in Python 3. 
with open(File,'r',newline='') as csvinput,open(output, 'w',newline='') as csvoutput: 
    writer = csv.writer(csvoutput) 
    reader = csv.reader(csvinput) 

    # Copy the header 
    row = next(reader) 
    writer.writerow(row) 

    # Edit the first column of each row. 
    for row in reader: 
     row[0] = dt.datetime.strptime(row[0],'%m/%d/%Y %H:%M:%S').time() 
     writer.writerow(row) 

Вход:

Time,0.3(/L),0.5(/L) 
02/15/2016 13:44:01,88452,16563 
02/15/2016 13:44:02,88296,16282 

Выход:

Time,0.3(/L),0.5(/L) 
13:44:01,88452,16563 
13:44:02,88296,16282 

Если на самом деле на Python 2, csv модуль документов с использованием двоичного режима. Заменить with линии:

with open(File,'rb') as csvinput,open(output, 'wb') as csvoutput: 
Смежные вопросы