應用程式 對csv以及excel處理的綜合應用

2021-10-03 09:57:10 字數 4425 閱讀 7037

博主之前特意說過,excel就是csv的一種,那麼在很多的商用資料中,不僅還用到csv還會用到excel,一旦資料量過大,綜合處理就會成為乙個問題,那麼這就是python高超的地方了,今天博主用一段較長的**來展示綜合的操作

我們開啟這三個檔案中任意乙個會發現

開頭的number都是這幾個數字,所以我們需要另外建立乙個檔案。使**的開頭是這幾個數字,以便於後來的匹配。如圖:

這是博主的匹配檔案及輸出檔案。

我們不需要刻意去手動新建乙個輸出的csv檔案,因為我們的python會幫我們建立

我們的目的是搜尋出匹配開頭那幾個數字的所有資料,並找到其出處,成立出來

準備工作完成,**

**:

import csv

import glob

import os

from datetime import date

from xlrd import open_workbook,xldate_as_tuple

items_find=

"e:\\桌面\\items_to_find.csv"

output_file=

"e:\\桌面\\output.csv"

items_to_find=

with

open

(items_find,

"r",newline='')

as item_number_csv_file:

filereader=csv.reader(item_number_csv_file)

for row in filereader:0]

)filewriter=csv.writer(

open

(output_file,

"a",newline="")

)#建立寫入物件

file_count=

0line_count=

0count_for_item_number=

0for input_file in glob.glob(os.path.join(

"e:\\桌面\\file_archive"

,'*.*'))

:#第乙個問題,路徑需要用雙斜槓來寫

file_count+=

1#檔案讀取沒問題了

if input_file.split(

".")[1

]=="csv"

:with

open

(input_file,

"r",newline="")

as fileread:

filereader=csv.reader(fileread)

header=

next

(filereader)

for row in filereader:

row_of_out=

for column in

range

(len

(header)):

if column==3:

cell_value=

str(row[column]

).strip(

"$")

.replace(

",","")

.strip(

)else

: cell_value=

str(row[column]

).strip())

if row[0]

in items_to_find:

#列表有問題。

filewriter.writerow(row_of_out)

#肯定是寫入進去的,而寫入的唯一方法是這一條**

print

(row_of_out)

count_for_item_number+=

1 line_count+=

1#csv檔案的問題解決之後,看xlsx檔案的問題

elif input_file.split(

".")[1

]=="xls"

or input_file.split(

".")[1

]=="xlsx"

: workbook=open_workbook(input_file)

for worksheet in workbook.sheets():

try:

header=worksheet.row_values(0)

except indexerror:

pass

for row in

range(1

,worksheet.nrows)

: row_of_out=

for column in

range

(len

(header)):

if worksheet.cell_type==3:

cell_value=xldate_as_tuple(worksheet.cell_value(row,column)

,workbook.datemode())

cell_value=

str(date(

*cell_value[0:

3]))

.strip(

)else

: cell_value=

str(worksheet.cell_value(row,column)

).strip())

ifstr

(worksheet.cell_value(row,0)

).split(

".")[0

].strip(

)in items_to_find:

filewriter.writerow(row_of_out)

count_for_item_number+=

1 line_count+=

1

標頭檔案:處理多個多個檔案自然而然要使用到glob,與os模組,所以開頭引用。既然還要處理excel檔案,那麼我們又得注意引用datetime模組來格式時間,已經excel的讀取模組xlrd

前面幾行我們把需要匹配的數字都寫入這個列表中,相信小夥伴們也能意識到,這個所謂的

完全是多餘,哈哈沒想到吧,其實我們只需要把所有需要匹配的數字填入乙個列表中即可,這樣做其實是為了以後處理特別大的csv或者excel時,我們這樣會稍微方便一點。整個10到13行博主覺得完全是作者的惡趣味…。

**filewriter=csv.writer(open(output_file,「a」,newline=""))**建立寫入物件,這裡小夥伴已經非常熟悉了。但是這個寫法博主以前應該一直是使用以下寫法寫的。

其實兩者是完全等價的,但是下面會對比較白的小夥伴比較友好,稍微熟悉的小夥伴就可以按博主上面的「新寫法寫」,簡單,大氣,上檔次

我們建立三個變數來計數。

**for input_file in glob.glob(os.path.join(「e:\桌面\file_archive」,』.』))**這裡我們使用for迴圈,glob以及os來讀取這個路徑下所有的檔案,這個 前後的星號代表的是檔案的名字和字尾,這樣寫代表所有檔案,當然你可以後面的星號改為xlsx這樣就只會讀取所有的xlsx檔案。

接下來我們來判斷需要處理的是csv還是excel,我們只需要使用split函式將檔名以 . 隔開成為乙個列表,利用他的字尾判斷即可。

if 後面的模組不需要講解,相信小夥伴已經非常熟悉了,就是之前處理兩種檔案的不同寫法。值得一提的是,這裡我們用到了tyr expect語句,這個屬於python中的異常處理,非常有用,大家可以去這裡了解一下。

前面博主特意提醒不要將那個沒用的items_to_find.csv與需要搜尋的三個檔案放在乙個路徑就是因為他也是乙個csv檔案,那麼我們讀取整個路徑自然會讀取到它,而它又只有幾行沒用的數字,那樣我們的輸出檔案裡面就會多出來幾行完全沒用的資料,雖然無傷大雅,但是對強迫症患者很不友好。

什麼是IIS應用程式池以及應用程式池詳解 二)

一起來 看看有關應用程式池的一些問題。應用程式池的 屬性 對話方塊有四頁 效能,執行狀況,標識,如圖六所示。在這些選項頁中,最引人注目的恐怕就是 頁,使用該選項頁可以管理工作程序的 在工作程序隔離模式中,iis可以配置成定期重新啟動應用程式池中的工作程序,從而更好地管理那些 的工作進 程。這確保了池...

ios應用程式和應用程式委託

其實說白了,就是乙個類將自己不願意實現的方法以協議的方式定義,同時在這個類中包含有乙個型別為id 泛型類 的例項變數,如果另乙個類實現了這個協議,那麼另外的這個類就可以作為第乙個類的委託物件,前乙個類將自己不願意實現的類委託給後乙個類。因為第乙個類擁有第二個類的引用,所有第乙個類的例項可以直接呼叫第...

python啟動應用程式和終止應用程式

每天上班,工作需要,電腦上需要每天開機啟動一些軟體,下班時候,需要關掉一些軟體。乙個乙個開啟和關閉貌似是很繁瑣的,於是乎,這個指令碼產生了。系統環境 win7 32位 python 2.7.9 你還需要安裝pywin32。pip install pywin32 啟動應用程式指令碼 coding ut...