博主之前特意說過,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...