2016-03-23 7 views
-1

で.CSVファイルの最初の列を上書きすることはできません:日時文字列と時間列がある画像で enter image description herePython-私は.csvファイル(画像参照)を持つ新しいタイムスタンプ

を、私は持っていますこの列を受け取り、時刻H:M:Sだけを読み取るプログラム。しかし、自分のプログラムだけでなく、タイムスタンプH:M:Sだけを読むようにしていますが、最初のファイルの時間欄を上書きしてH:M: Sタイムスタンプを新しい.csvに追加します。次のコードを入力します。

CODE:

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の文字列上書き:新しい.csvファイルでのS:Mを。しかし、ここで問題があります。出力ファイルは、すべての列を置き換えたtime列を置き換える代わりに、このような出力ファイルを取得します。 M:最初にS Iは、フォーマットHで、tは本当に最初の画像のファイルのように見えるために新しい出力ファイルを作成する方法を知っている「をドン。この時点で

enter image description here

:第二の画像を参照してください。列のみ、第2のイメージのように全てがスクランブルされているわけではありません。助言がありますか? BAH FOR

SCREENSHOT enter image description here

はK列を参照してください、それは最初の画像の列Aであるべきであり、列B、C、D、E、F、G、I、およびJは同じままべき以下のような画像1.

.CSVファイルのダウンロードリンク:

#!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) 

入力:いくつかの単純化されたデータではhttp://www.speedyshare.com/z2jwq/HiSAM1-data-160215-164858.csv

+0

まずだろう、それはあなたがループの2番目のを必要としないように見えます。あなたの最初のforループでは、読者の最初の行として定義されている行に追加しています。 – Bahrom

+0

@Bah Line [0]をLine [1]に変更しました。最初の列である時間列は読み込まれませんが、2番目の列である0.3/L列は読み取られません。だから私はライン[0]を別の値に変更することはできません。たぶん私はあなたが何を言っているのか理解していません... – dontbadick

+0

2番目のループを完全にコメントアウトし、最初のループのボディを(row.append ...; all.appendから)この行に変更してみてください: 'all.append(line + [最新の編集を取り、先に括弧を忘れてしまった] – Bahrom

答えて

2

、:とwith行を置き換え質問。

考え方は、異なる行を追跡し、各行の最初の要素だけを変更することです。また、必要に応じて、列のラベルを示す最初の行を保持する必要があります。問題を解決するために、コードは次のようになります。

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) 

リストrowscsvinputから修正ラインを持っています。

(重複問題の最初の行でテスト)結果の出力csvファイルは、すべての enter image description here

+0

ありがとうございます!私は何をねじ込んだ参照してください! – dontbadick

0
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モジュール文書に。に投稿された第二の画像になり、あなたのコードの主な問題は、あなたが最初の行に、CSVの行の各時間を追加し維持しているようだ

with open(File,'rb') as csvinput,open(output, 'wb') as csvoutput: 
関連する問題