簡體   English   中英

Python-無法用新的時間戳覆蓋.csv文件的第一列

[英]Python- Can't overwrite first column of .csv file with new time stamp

我有一個.csv文件(參見圖片): 在此處輸入圖片說明

在圖像中,有一個帶有datetime字符串的time列,我有一個程序采用此列,並且僅讀取時間H:M:S。 但是,不僅在我的程序中,我嘗試將列僅讀取時間戳H:M:S,而且還嘗試覆蓋第一個文件的time列,並僅將其替換為H:M:使用以下代碼在新的.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)

該程序可以工作,並獲取日期時間字符串,並在新的.csv文件中用時間戳記H:M:S覆蓋該字符串。 但是,這就是問題所在,輸出文件而不是替換時間列,而是替換了每一列,從而獲得了如下所示的輸出文件。 參見第二張圖片:

在此處輸入圖片說明

在這一點上,我真的不知道如何使新的輸出文件看起來像第一個圖像的文件,僅第一列中的格式為H:M:S,並不是所有的輸出文件都像第二個圖像中那樣混亂。 有什么建議么?

屏幕截圖 在此處輸入圖片說明 對於BAH:

請參閱K列,它應該是第一張圖片的A列,B,C,D,E,F,G,I和J列應保持與圖片1相同。

下載.csv文件的限制: http//www.speedyshare.com/z2jwq/HiSAM1-data-160215-164858.csv

代碼的主要問題似乎是您一直在將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文件(已在問題的第一行進行了測試) 在此處輸入圖片說明

使用一些簡化的數據:

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

您不能覆蓋CSV文件中的一行。 您必須將想要的所有行寫入一個新文件,然后將其重命名為原始文件名。

您的使用方式可能比CSV文件更適合數據庫。 在sqlite3模塊中查找輕量級數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM