[英]Python- Can't overwrite first column of .csv file with new time stamp
在圖像中,有一個帶有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,並不是所有的輸出文件都像第二個圖像中那樣混亂。 有什么建議么?
請參閱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
的修改行。
使用一些簡化的數據:
#!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.