2017-04-03 65 views
0

我正在为项目编写一些代码并将此代码保存为.csv格式。然后它将在excel中打开以进一步检查数据。有8个花车,然后每行1个字符串。如何获得excel来显示不同单元格中的每个值?节省代码在excel中格式化csv文件的Python

def save_array(): 
    t = utctime.t() 
    temp = data.get_data() 
    atime = np.append([temp],[t]) 
    atime = ' '.join(atime) 
    return atime 

with open(path2, 'w') as save_data: 
    save_data_write = csv.writer(save_data, delimiter = ' ' , dialect = 'excel') 
    save_data_write.writerow([save_array()]) 
save_data.close() 

while i: 
    time.sleep(1) 
    with open(path2,'a') as save_data: 
    save_data_append = csv.writer(save_data, delimiter = ' ', dialect = 'excel') 
    save_data_append.writerow([save_array()]) 
save_data.close() 

在Excel中保存的数据如下所示。

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Apr 03 2017 20:24:59 

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Apr 03 2017 20:25:00 

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Apr 03 2017 20:25:01 

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Apr 03 2017 20:25:02 

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Apr 03 2017 20:25:03 

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Apr 03 2017 20:25:04 

0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Apr 03 2017 20:25:05 

这没有复制得很好,但在Excel中,这是所有在第一个单元格,它也跳过行之间的一行。有人知道如何正确地格式化吗?

感谢

+1

你可以用Excel打开一个'.csv'文件,没有什么奇怪的。首先,用逗号分隔而不是空格。但是,我不明白'save_data_write.writerow([save_array()])',特别是'save_array()'。 – roganjosh

+0

另外,如果你想在Windows中写入csv文件,使用'wb'而不是'w';这将消除行间不需要的换行符。 – roganjosh

+0

save_array()是调用要保存的数组的函数调用 –

回答

1

快速应答(最简单的方法):

import numpy 
#open the file in append, binary mode 
savefile=open('filename.csv','ab') 

#write to it the first time 
save_data = save_array() 
numpy.savetxt(savefile, save_data, fmt='%s', delimiter=',', newline='\n') 

#do your loop here 
time.sleep(1) 
save_data = save_array() 
numpy.savetxt(savefile, save_data, fmt='%s', delimiter=',', newline='\n') 

#once done 
savefile.close() 

这将节省一切,(因为%s选项)字符串,但应该为你的应用程序。因为我们首先以'ab'模式打开文件(append,binary),它不会写入文件,而是继续添加到底部。如果您想每次运行代码时都重新开始,请使用'wb'打开文件。

更笨重的方式(但也许更传统,更好地为某些特定的应用程序):

#open the file in append, binary mode 
savefile=open('filename.csv','ab') 
csvwriter = csv.writer(myFile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 

save_data = save_array() 
for i in range(len(save_data)): 
    csvwriter.writerow(save_data[i]) 

#do your loop here 
time.sleep(1) 
save_data = save_array() 
for i in range(len(save_data)): 
    csvwriter.writerow(save_data[i]) 

#once done 
savefile.close() 

希望帮助,并确保以纪念这是一个正确的答案,如果它解决您的问题。

更多细节有兴趣的读者:当你明白它们是如何读

CSV文件是非常简单的。

首先,您应该理想地使用未包含在任何列中的分隔符(用于分隔列的字符)。由于你的字符串中有空格,所以你不应该使用空格分隔符。逗号是常用的选择,但分号和制表符(可以使用\ t作为分隔符来获得)是其他常用选项。通常,一个使用带.txt文件的选项卡,而.csv文件使用逗号。

其次,你需要告诉Excel格式是什么。 Excel预计.csv文件可以用逗号分隔(可以理解,因为名称的字面意思是“逗号分隔值”)。对于.txt文件,它应该打开一个向导,让您选择如何读取数据。

+0

谢谢帮助很多 –

0
file_path = 'name.csv' 
with open(file_path, 'w', newline='') as result_file: 
    csv_writer = csv.writer(result_file, delimiter=',', quotechar='"', 
           quoting=csv.QUOTE_MINIMAL) 
    csv_writer.writerow([1, 2.2, '33'])