Python筆記:用Python按條件拆分Excel或CSV等文件

2022-01-30 哈佛在等我呢

用Python批量拆分Excel文本信息只需要使用pandas模塊。比如,我們想將Excel文件按照"部門"欄位的不同關鍵詞進行拆分,一個部門拆分到一個Excel文件中。需要拆分的Excel部分數據截圖如下:

import pandas as pddata = pd.read_excel(r"C:\Users\QDM\Desktop\chaifen打折.xlsx")
data_excel = []
sheetname = []
for x in data.groupby("部門"): data_excel.append(x[1]) sheetname.append(x[0])for i in range(len(sheetname)): data_excel[i].to_excel(r"C:\Users\QDM\Desktop拆分" + str(sheetname[i]) + ".xlsx",index = False)

註:如果報錯 EOL while scanning string literal ,那是因為字符串引號沒有成對出現,把 r"C:\Users\QDM\Desktop\" 最後面的斜槓去掉或者隨便新增一些字符即可。

import pandas as pdfilepath = r"C:\Users\QDM\Desktop\待拆分.xlsx"df = pd.read_excel(filepath)

class_list = list(df["省份"].unique())class_list

for i in class_list:    df_cut = df[df["省份"]==i]    df_cut.to_excel(r"C:\Users\QDM\Desktop\%s.xlsx"%(i),encoding = "utf-8", index = False)

運行結果:

假如在某一個Excel工作簿中,有一張叫「總表」的工作表,我們想以某一列的欄位屬性,將該表拆分成若干張只包含某一相同類別的分表,這時,我們可用下面的VBA代碼來玩一下:

註:同一種類別要連續在一起(可以先排一個序)

Sub split1()Dim sw As Worksheet, answer, arr, t1%, t2$, t3$, rng As Range, arr1, dic As Object, i%, arr2, i1%, h1%, h2%Application.DisplayAlerts = FalseFor Each sw In WorksheetsIf sw.Name <> "總表" Then sw.DeleteNextanswer = InputBox("請輸入標題所佔行數,拆分列列標,數據區域最後一列的列標,中間用英文逗號隔開,如:2,a,e")arr = VBA.split(answer, ",")t1 = arr(0) * 1t2 = arr(1)t3 = arr(2)Set rng = Range("a1", t3 & t1)arr1 = Range(t2 & (t1 + 1), Cells(Rows.Count, t2).End(3))Set dic = CreateObject("scripting.dictionary")For i = 1 To UBound(arr1)    dic(arr1(i, 1)) = ""Nextarr2 = dic.keysFor i1 = 0 To dic.Count - 1    h1 = Range(t2 & ":" & t2).Find(arr2(i1)).Row    h2 = h1 + Application.CountIf(Range(t2 & ":" & t2), arr2(i1)) - 1    Set rng1 = Range("a" & h1, t3 & h2)    Worksheets.Add.Name = arr2(i1)    rng.Copy ActiveSheet.[a1]    rng1.Copy ActiveSheet.Range("a" & (t1 + 1))    Sheet1.ActivateNextMsgBox "已經拆分完畢"Application.DisplayAlerts = TrueEnd Sub

拆分前:

拆分後:

Sub split()
'根據需要,聲明變量Dim sw As Worksheet, answer, arr, t1%, t2$, t3$, rng As Range, arr1, dic As Object, i%, arr2, i1%, h1%, h2%
'拆分之前先把工作簿中除了總表以外的表全部刪除Application.DisplayAlerts = FalseFor Each sw In WorksheetsIf sw.Name <> "總表" Then sw.DeleteNext
'1、確定標題區域和拆分列的列標answer = InputBox("請輸入標題所佔行數,拆分列列標,數據區域最後一列的列標,中間用英文逗號隔開,如:2,a,e")arr = VBA.split(answer, ",")t1 = arr(0) * 1t2 = arr(1)t3 = arr(2)
'第一步,確定標題區域,確定拆分標記所處的區域並把其裝入數組arr中Set rng = Range("a1", t3 & t1)arr1 = Range(t2 & (t1 + 1), Cells(Rows.Count, t2).End(3))
'第二步,新建一個字典,把拆分標記寫入字典,比如本例中為部門Set dic = CreateObject("scripting.dictionary")For i = 1 To UBound(arr1) dic(arr1(i, 1)) = ""Next
'第三步:拆分並生成新的sheet
'循環出拆分標記arr2 = dic.keysFor i1 = 0 To dic.Count - 1
'在總表拆分列查找第一個拆分標記所在的首行和尾行行號 h1 = Range(t2 & ":" & t2).Find(arr2(i1)).Row h2 = h1 + Application.CountIf(Range(t2 & ":" & t2), arr2(i1)) - 1 '確定待覆制區域,e列為最後一列,可根據實際情況修改 Set rng1 = Range("a" & h1, t3 & h2) '以arr2(i1)為名新建sheet Worksheets.Add.Name = arr2(i1) '把標題和要複製的內容複製到新建的表裡 rng.Copy ActiveSheet.[a1] rng1.Copy ActiveSheet.Range("a" & (t1 + 1)) '返回總表 Sheet1.ActivateNext
'提示拆分完成MsgBox "已經拆分完畢"Application.DisplayAlerts = True
End Sub

使用此代碼注意事項:

1. 打開需要拆分的工作簿的VBE窗口,

2. 新建一個模塊,把上面的代碼複製進去,

3. 需要拆分的工作表名稱改為總表,

4. 對需要拆分的數據按照拆分列進行排序,升序降序無所謂,

5. 運行代碼,

6. 在彈出的窗口中按要求輸入

當然第四步排序用代碼也可以完成,或者不用排序,把需要複製的數據直接寫入到數組裡也可以,以上純屬個人習慣。

註:VBA代碼參考並修改自網絡(最後一段代碼貌似是來自公眾號"米宏office"),Python代碼則是自己所寫。

相關焦點

  • Python筆記:批量合併Excel文件信息
    但是,如果文件的數目太多(比如幾十個、上百個、幾百上千個)的時候,再一個一個地去加載,會是一件很折騰人的事情。我們又知道,for循環可用來進行批處理,來幫我們自動實現大量重複的操作步驟。例如:我在桌面上的「python」文件夾內放置4個表結構相同(表頭相同)的文件,接下來我準備用for循環優雅地實現上面我所吹過的牛。文件截圖如下:註:為了不洩露工作信息,所以我對表格內容進行了模糊化處理。
  • Python 按分組批量導出 Excel 文件
    我們在日常辦公時,需要將文件進行切分。比如,銷售助理需要將一個客戶名單按分配給的不同銷售人員分成不同的 Excel 文件。
  • n種方式教你用python讀寫excel等數據文件
    點擊上方「濤哥聊Python」,選擇「星標」公眾號重磅乾貨,第一時間送達來源:Python大數據分析python處理數據文件的途徑有很多種,可以操作的文件類型主要包括文本文件(csv、txt、json等)、excel
  • 軟體應用 | Python實現CSV文件的合併與拆分
    Part1引言CSV(逗號分隔值文件格式,有時也稱為字符分隔值,因為分隔字符也可以不是逗號)是一種通用的、相對簡單的文件格式,被用戶、商業和科學廣泛應用。CSV最廣泛的應用是在程序(軟體)之間轉移表格數據。假設有以下場景,張三從Oracle資料庫中導出一張數據表格發送給王五,王五使用Stata軟體對該表格數據進行計量分析。
  • n種方式教你用Python讀寫Excel等數據文件
    下面整理下python有哪些方式可以讀寫數據文件。1. read、readline、readlinesread()  :一次性讀取整個文件內容。推薦使用read(size)方法,size越大運行時間越長readline()  :每次讀取一行內容。
  • python讀寫csv文件
    這樣的方式在處理制表符分隔的文件時,沒什麼問題,但是在處理csv文件時,會非常的頭痛。CSV文件格式簡單理解,是逗號分隔的純文本,但是實際上非常靈活。在excel導出的csv文件中,會遇到某個欄位內部出現了逗號的情況,這樣的字符在兩端添加雙引號來進行區分,示意如下>>> with open('file.csv') as f:... for line in f:... print(line.rstrip().split(','))...
  • Python讀取csv文件常見的兩種方法
    一、數據存取之csv(一)什麼是csvCSV是一種通用的、相對簡單的文件格式,被用戶、商業和科學廣泛應用。最廣泛的應用是在程序之間轉移表格數據,而這些程序本身是在不兼容的格式上進行操作的(往往是私有的和/或無規範的格式)。
  • Python讀取CSV和Excel
    CSV逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味著該文件是一個字符序列,不含必須像二進位數字那樣被解讀的數據。
  • python筆記5-python2寫csv文件中文亂碼問題
    對中文編碼糾結的建議儘快換python3吧,python2且用且珍惜!一、csv中文亂碼1.open打開csv文件,用writer寫入帶有中文的數據時- writer寫入單行- writers寫入多行```# coding:utf-8import csvf = open("xieru.csv", 'wb')writer =
  • Python 簡單操作 CSV
    CSV與Excel區別Python 通過 csv 模塊來實現 CSV 格式文件中數據的讀寫,該模塊提供了兼容 Excel 方式輸出、讀取數據文件的功能,這樣我們無需知道 Excel 所採用 CSV 格式的細節,同樣的它還可以定義其他應用程式可用的或特定需求的 CSV 格式。
  • python教程實戰,json、csv等讀寫
    •load - 將文件中的JSON數據反序列化成對象。•loads - 將字符串的內容反序列化成Python對象。使用的時候請注意其中的差別。比如dumps,指的是將Python對象處理成JSON格式的字符串,而loads指的是將字符串的內容反序列化成Python對象。注意粗體字部分。dump是將python對象保存到文件中(json格式)。
  • Python處理CSV文件
    在數據處理過程中,可能會需要採用篩選、提取、重新生成等方法來對數據進行處理,下面以csv文件為例,介紹使用Python處理文本文件的方法。開始之前在面對文件讀寫類的問題時,open函數是一定繞不開的,下面先介紹幾種open函數使用的技巧。
  • python學習筆記 - 讀寫CSV文件
    CSV文件為純文本文件,建議使用記事本來開啟,其中使用逗號分隔每條記錄中的欄位:或者,也可以另存新檔後用Excel開啟:python三方庫提供了csv庫,我們需要通過這個庫,來實現對CSV文件的讀與寫。所以我們在應用csv庫之前,需要提前安裝它。
  • python生成excel文件的三種方式
    來源:經授權轉自 AI碼科技(ID:eleven_bmw)作者 :臭榴槤在我們做平常工作中都會遇到操作excel,那麼今天寫一篇,如何通過python操作excel當然python操作excel的庫有很多,比如pandas,xlwt/xlrd,openpyxl等,每個庫都有不同的區別,具體的區別,大家一起來看看吧~xlrd是對於Excel進行讀取,xlrd 操作的是
  • Python對CSV文件的處理
    在Python中,讀取csv文件使用到的標準庫是csv,直接導入就可以了,要讀取的CSV文件內容為:見讀取CSV文件裡面內容的源碼:#!/usr/bin/env python #-*-coding:utf-8-*-#author:wuyaimport  csvdef readCsv(): with open('csvTest.csv','r') as f: rander=csv.reader(f) #對數據循環獲取
  • 批量轉化xlsx文件為csv格式
    xlsx文件轉化為csv文件,畢竟大部分人不是做代碼的,用的文件都是xlsx,工作上的對接還是很耗費時間的。實戰import pandas as pdimport osimport xlrd#---批量轉換excel為csv---def excel_to_csv(file): path = file#文件路徑 filename = [] for name in os.listdir(path):
  • CSV文件在Python中的幾種處理方式
    二、使用Python基本語法讀寫CSV文件 使用基本語法讀取CSV文件中的數據大概思路是:獲取文件對象,讀取表頭,按逗號分隔符拆分表頭欄位,使用for循環語句獲取表體記錄數據,拆分後再次寫入另一張CSV文件中(如果要將數據寫入xls*格式的文件中,請參考前期公眾號文章),步驟如下:Step 1:導入必要模塊,獲取輸入輸出文件路徑。
  • 教你如何用Python輕輕鬆鬆操作Excel、Word、CSV,一文就夠了,趕緊碼住!!!
    python-excel官網:www.python-excel.org/Python 操作 Word安裝 python-docx處理 Word 需要用到 python-docx 庫,目前版本為 0.8.10 ,執行如下安裝命令:$ pip install python-docx
  • Python爬蟲 | 0xc - 數據存儲:CSV和Excel
    一種簡單的方法就是,在存儲時,用特定的結構,加入分隔符,如使用-分隔:提取的話,按行讀取,調用下string的split('-')函數分組,按照遊標一一對應即可。CSV(Comma-Separated Values,逗號分隔值) 以純文本形式存儲表格數據(數字和文本),記錄間以某種換行符分隔。
  • 基於Python實現對各種數據文件的操作
    常見的數據文件類型如下:txtcsvexcel(xls\xlsx)在線網頁數據pdf\word其他數據軟體格式1 txt文件更多參考:https://docs.python.org/3/tutorial/inputoutput.html