使用python將數(shù)據(jù)寫入excel

由于經(jīng)常需要用到這方面的內(nèi)容,所以要好好記錄一下,省的以后老找了

使用的代碼版本為 Python3

  1. 首先呢,數(shù)據(jù)是這個(gè)樣子的

V04002 V01000 V04001 V10004 V12001 V11002 V13004 V13003 V13011

1 58015 2014 10203 26 19 49 67 0

2 58015 2014 10212 23 21 59 79 282

3 58015 2014 10149 113 20 86 64 87

4 58015 2014 10112 154 14 135 78 615

5 58015 2014 10040 217 17 167 66 530

6 58015 2014 10003 241 12 238 81 571

7 58015 2014 9999 267 14 287 83 1345

8 58015 2014 10033 244 11 271 89 717

第一行對(duì)應(yīng)的含義是:

'V04002':'月','V01000':'區(qū)站號(hào)','V04001':'年','V14032':'日照時(shí)數(shù)','V10202':'極端最低本站氣壓','V10004':'平均本站氣壓','V12001':'平均氣溫','V11002':'平均風(fēng)速','V10201':'極端最高本站氣壓','V13004':'平均水汽壓','V13003':'平均相對(duì)濕度','V13011':'降水量','V12212':'平均最低氣溫'

我想用Python把它寫入excel中

  1. 用到的知識(shí)

(1)使用字典

使用字典將對(duì)應(yīng)的代號(hào)轉(zhuǎn)換成中文

(2)讀取文件

因?yàn)閿?shù)據(jù)是以txt格式來(lái)進(jìn)行保存的,所以需要用到IO操作來(lái)讀取數(shù)據(jù)。


with open('read.txt','r') as f:

在這里會(huì)用with ... as

因?yàn)槲募?duì)象實(shí)現(xiàn)了上下文管理器協(xié)議,程序進(jìn)入with語(yǔ)句塊時(shí),會(huì)把文件對(duì)象賦值給變量f,在程序退出 with 語(yǔ)句塊時(shí),會(huì)自動(dòng)調(diào)用close方法

需要注意的是,如果是寫入文件,可以在函數(shù)中指定字符編碼格式

with open('output.txt','w',encoding='utf-8') as f:


with open('output.txt','w',encoding='utf-8') as f:

    contents='愚人之丘'

    f.write(content)

在Python2中可以使用io模塊的open。Python2 io.open()等價(jià)于Python3 open()

from io import open

(3)pandas

我曾經(jīng)用pandas爬去過(guò)網(wǎng)頁(yè)上的表格,十分好用,看過(guò)介紹,正好在這里也用的上

在dataframe的示例上是這樣寫的


data = {'Country': ['Belgium', 'India', 'Brazil'],

'Capital': ['Brussels', 'New Delhi', 'Brasília'],

'Population': [11190846,1303171035,207847528]}

df = pd.DataFrame(data,

columns=['Country', 'Capital', 'Population'])

我將數(shù)據(jù)轉(zhuǎn)換成這種形式,然后使用pandas的to_excel(name,sheet_name=name)將其保存為excel的格式

(4)split(),strip()

split()

通過(guò)指定分隔符對(duì)字符串進(jìn)行切片,如果參數(shù)num 有指定值,則僅分隔 num 個(gè)子字符串


    str.split(str="",num=string.count(str)).

strip()

用于移除字符串頭尾指定的字符(默認(rèn)為空格)。


#!/usr/bin/python

str="0000000this is string example....wow!!!0000000";

printstr.strip('0');

輸出即為

this is string example....wow!!!

還可以單獨(dú)去除一邊,也可以使用replace


" xyz ".strip()                    # returns "xyz"

" xyz ".lstrip()                    # returns "xyz "

" xyz ".rstrip()                    # returns " xyz"

" x y z ".replace(' ','')        # returns "xyz"

  1. 代碼

# -*- coding: UTF-8 -*-

import pandas as pd



def toexcel(name):

print('*****************************')

print(name)

print('*****************************')

biaotou={'V04002':'月','V01000':'區(qū)站號(hào)','V04001':'年','V14032':'日照時(shí)數(shù)','V10202':'極端最低本站氣壓','V10004':'平均本站氣壓','V12001':'平均氣溫','V11002':'平均風(fēng)速','V10201':'極端最高本站氣壓','V13004':'平均水汽壓','V13003':'平均相對(duì)濕度','V13011':'降水量','V12212':'平均最低氣溫'}

header=[]                                                #存放轉(zhuǎn)換過(guò)的表頭

data=[]                                                    #存放數(shù)據(jù)

pre=name.split('.')[0]                              #excel文件名稱(小數(shù)點(diǎn)前)

xlsname=(pre+'.xlsx')

with open(name) as file:

    for line in file:

        line=line.strip('\n').strip()                #先去掉換行符\n,再去掉前后的空格

        line=line.split(' ')                            #將每行的數(shù)據(jù)分隔開(kāi)

        for n in line:

            if n in biaotou.keys():

                header.append(biaotou[n])

            else:

                data.append(line)

                break

df=pd.DataFrame(data,columns=header)

df.to_excel(xlsname,sheet_name=pre)



if __name__ == "__main__":

    name='*****'                #數(shù)據(jù)名稱

    toexcel(name):

  1. 應(yīng)用到多個(gè)文件
    因?yàn)閿?shù)據(jù)文件不只是一個(gè)是有很多個(gè),要應(yīng)用到很多個(gè),所以同樣要寫個(gè)方法,獲取所有數(shù)據(jù)的文件的名字,一個(gè)個(gè)的傳給上面的方法,我是通過(guò)用到os.listdir() 和os.getcwd() 。

os.listdir() 方法用于返回指定的文件夾包含的文件或文件夾的名字的列表。這個(gè)列表以字母順序。 它不包括 '.' 和'..' 即使它在文件夾中。

os.getcwd() 方法用于返回當(dāng)前工作目錄。

將這兩個(gè)方法一起用就可以獲得當(dāng)前目錄的所有文件的名稱(以后會(huì)改成傳入地址的)

def getname():
  names=[]
  passname=['toexcel.py']              #將不想執(zhí)行的該程序的文件名,放在這個(gè)中,在              
                                                        這里,這個(gè)是Python代碼的名字
  filenames = os.listdir(os.getcwd())
  for name in filenames:
    if name not in passname:
      names.appends(name)
  return names

將3,4結(jié)合,稍加改動(dòng)就可以將所有數(shù)據(jù)文件寫入到excel中

我知道我的方法比較繁瑣,如果有更好的方法,如果那里有什么錯(cuò)誤,希望可以告知,共同進(jìn)步

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容