整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          pandasData爬蟲數(shù)據(jù)清洗方法

          pandasData爬蟲數(shù)據(jù)清洗方法

          Python中進行爬蟲數(shù)據(jù)清洗時,通常需要對從網(wǎng)頁中提取的原始數(shù)據(jù)進行處理,以去除無用信息、格式化數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)類型等,以便于后續(xù)分析或存儲。以下是一些常用的數(shù)據(jù)清洗步驟和方法:

          去除HTML標簽: 使用BeautifulSoup或lxml庫來解析HTML文檔,并提取所需的文本內(nèi)容。

          from bs4 import BeautifulSoup

          soup=BeautifulSoup(html_content, 'html.parser')

          text_data=soup.get_text()


          去除空白字符: 使用字符串的.strip()方法去除字符串兩端的空格、換行符和制表符。

          cleaned_string=original_string.strip()


          替換或刪除特定字符: 使用字符串的.replace()方法替換不需要的字符或字符串。

          cleaned_string=original_string.replace('特定字符', '')


          規(guī)范化文本: 使用正則表達式進行文本規(guī)范化,例如統(tǒng)一大小寫、移除HTML實體、標準化日期格式等。

          import re

          cleaned_string=re.sub(r'<[^>]+>', '', original_string) # 移除HTML標簽

          cleaned_string=original_string.lower() # 統(tǒng)一小寫


          數(shù)據(jù)類型轉(zhuǎn)換: 將字符串轉(zhuǎn)換為整數(shù)、浮點數(shù)或日期等適當?shù)臄?shù)據(jù)類型。

          number=int(original_string)

          date=datetime.strptime(original_date_string, '%Y-%m-%d')


          去除重復數(shù)據(jù): 如果數(shù)據(jù)集中有重復的項,可以使用集合(set)或數(shù)據(jù)框架(pandas DataFrame)的去重功能來去除它們。

          unique_data=list(set(original_data))

          df=df.drop_duplicates() # pandas DataFrame去重


          填充缺失值: 使用適當?shù)姆椒ㄌ畛鋽?shù)據(jù)集中的缺失值,如使用平均值、中位數(shù)或特定的占位符。

          df['column']=df['column'].fillna(df['column'].mean())


          數(shù)據(jù)規(guī)范化和標準化: 對數(shù)據(jù)進行規(guī)范化(歸一化)或標準化(z-score標準化),使其滿足后續(xù)算法的輸入要求。

          from sklearn.preprocessing import StandardScaler

          scaler=StandardScaler()

          df['normalized_column']=scaler.fit_transform(df[['column']])


          編碼轉(zhuǎn)換: 對非英文或含有特殊字符的字符串進行編碼轉(zhuǎn)換,確保數(shù)據(jù)的一致性。

          encoded_string=original_string.encode('utf-8').decode('utf-8')


          數(shù)據(jù)清洗流程自動化: 使用pandas等庫提供的功能,將數(shù)據(jù)清洗流程自動化,并保存為可重用的腳本或函數(shù)。

          import pandas as pd

          def clean_data(df):

          # 執(zhí)行數(shù)據(jù)清洗步驟

          df.dropna(inplace=True)

          df['column']=pd.to_numeric(df['column'], errors='coerce')

          # ... 其他清洗步驟

          return df

          df_cleaned=clean_data(df_original)


          數(shù)據(jù)清洗是一個迭代和不斷細化的過程,需要根據(jù)實際數(shù)據(jù)和業(yè)務需求不斷調(diào)整和優(yōu)化。在進行數(shù)據(jù)清洗時,建議保留原始數(shù)據(jù),以便必要時回溯或驗證清洗步驟。

          Markdown文檔的好處

          相信很多朋友在開發(fā)和工作過程中都會使用MarkDown格式來編寫文檔,Markdown文檔的好處多多:

          • 它基于純文本,方便修改和共享;
          • 幾乎可以在所有的文本編輯器中編寫;
          • 有眾多編程語言的實現(xiàn)和應用的相關擴展;
          • 在 GitHub 等網(wǎng)站中有很好的應用;
          • 很容易轉(zhuǎn)換為 HTML 文檔或其他格式;
          • 適合用來編寫文檔、記錄筆記、撰寫文章。

          而在眾多的MarkDown文檔的編輯器中,我們比較常用的一款工具是Typora,前幾年是免費的,最近1.0正式版以后開始要收費了。

          Typora的優(yōu)勢

          Typora容許隨時隨地開展無縫拼接瀏覽,從而可以在編輯的同時及時的看到效果。筆者現(xiàn)在寫這個文檔就是使用的這個工具。它有以下好處:

          1. 在Win,Mac和Linux上能用
          2. 它具備審校作用,能夠檢查拼讀和英語的語法
          3. 全自動匹配Markdown標記,比如括弧
          4. 支持大概100種語言并支持英語的語法突顯
          5. 豐富多彩的作用和鍵盤快捷鍵
          6. 與內(nèi)聯(lián)公式和顯示信息公式適配

          Typora的不足

          工具可以做到圖文并茂的編寫文檔,所有插入的圖片默認放在當前文檔的assets目錄下,也可以通過設置指定圖片保存的位置,使用起來很方便。

          但不足的是,如果文檔進行了修改,圖片從文檔中刪除了,殘留在當前目錄下的assets目錄下的圖片并不會一同刪除。隨著文檔不斷的更新和修改,這個目錄下的圖片文件會越留越多,有時多達幾十M。不但占用空間,而且毫無用處。

          雖然我們可以手動點擊每張圖片查看具體是哪張圖片,再一張張手工去刪除,但圖片如果多的話,也是很繁瑣的事情,而且考驗人的耐心。

          我們能不能自己寫個程序,分析整個Markdown文檔中的圖片地址,然后批量刪除呢?有了這個想法以后,我就自己花了一些時間做了一個,目前已經(jīng)使用了一年多了,沒有發(fā)現(xiàn)什么問題,特意寫出來分享給大家。

          實現(xiàn)思路

          思路

          首先我們需要分析Markdown文檔的格式,它本質(zhì)上就是一個文本文件。大致實現(xiàn)思路如下:

          1. 使用Java中的IO流API對文檔進行解析
          2. 找到文檔中圖片的地址,使用正則表達式進行分析,將所有文檔中出現(xiàn)的圖片文件名保存成一個集合。
          3. 再到assets文件夾下去查找所有的圖片文件名,也保存成一個集合。
          4. 對比兩個文件名的集合,將在assets目錄下存在的文件,文檔中不存在的圖片文件全部找出來
          5. 刪除所有不存在的圖片文件

          源代碼

          package org.newboy.utils;
          
          import org.apache.commons.io.FileUtils;
          import org.apache.commons.lang3.StringUtils;
          
          import java.io.File;
          import java.io.IOException;
          import java.util.Collection;
          import java.util.HashSet;
          import java.util.Scanner;
          import java.util.regex.Matcher;
          import java.util.regex.Pattern;
          
          /**
           * @author NewBoy
           * @version 1.0
           * @since 2020-12-04
           * 刪除MarkDown目錄下多余的圖片文件
           */
          public class MarkDownPictureCleaner {
          
          
              public static void main(String[] args) {
                  System.out.println("===MarkDown下冗余圖片清理工具(開發(fā)者:NewBoy 版本:1.0)===");
          
                  Scanner scanner=new Scanner(System.in);
          
                  //MarkDown的文件名
                  String path=null;
                  try {
                      System.out.println("請輸入Markdown文件的路徑和文件名(可直接將md文件拖到命令窗口):");
                      path=scanner.nextLine();
                  } catch (Exception e) { // 用戶可能按下 Ctrl + C 終止程序
                      System.out.println("程序結(jié)束!");
                      scanner.close();
                      System.exit(0);
                  }
          
                  // 預檢查,判斷用戶輸入的文件是否存在
                  File file=null;
          
                  //圖片所在目錄
                  String picDir=null;
          
                  if (StringUtils.isNotBlank(path)) {
                      //如果用戶在DOS命令窗口拖入,前后有雙引號,去掉雙引號
                      path=path.trim().replace("\"", "");
                      //創(chuàng)建文件對象
                      file=new File(path);
                      if (!file.exists()) {
                          System.out.println("Markdown文件不存在!");
                          file=null;
                      }
                      else {
                          System.out.println("請輸入圖片目錄(默認為assets):");
                          //圖片所在目錄
                          picDir=scanner.nextLine();
                          //如果為空,空串,或者空格
                          if (StringUtils.isBlank(picDir)) {
                              picDir="assets";
                          }
                      }
                  }
          
                  // 讀取 Markdown 文件的內(nèi)容
                  String content=null;
                  if (file !=null) { // 如果用戶輸入的文件不存在,跳過此次操作
                      System.out.println("您輸入的路徑:" + file.getAbsolutePath());
                      try {
                          content=FileUtils.readFileToString(file, "UTF-8");
                      } catch (IOException e) {
                          System.out.println("文件讀取異常:" + e.getMessage());
                          content=null;
                      }
                  }
          
                  if (content !=null) {
                      // 找出 Markdown 文件中所有圖片的引用
                      String regex="(!\\[.*\\])(\\(.*\\))|(<img\\b.*?(?:\\>|\\/>))"; // 捕獲組,匹配類似于 "![*](*)" 的字符串
                      Pattern pattern=Pattern.compile(regex);
                      Matcher matcher=pattern.matcher(content);
                      HashSet<String> picturesInMarkdown=new HashSet<>();
          
                      while (matcher.find()) {
                          String ref=matcher.group(0);
                          String picture=null;
                          int beginIndex=0;
                          int endIndex=0;
                          //如果是!開頭
                          if (ref.startsWith("!")) {
                              // 獲取圖片名稱
                              beginIndex=ref.lastIndexOf("/") + 1;
                              endIndex=ref.length() - 1;
                          } else if (ref.startsWith("<")) { //或者以<開頭的
                              beginIndex=ref.indexOf("/") + 1;
                              endIndex=ref.indexOf('"', beginIndex);
                          }
                          picture=ref.substring(beginIndex, endIndex);
                          //logger.info(picture);
                          // 保存圖片名稱
                          picturesInMarkdown.add(picture);
                      }
          
                      System.out.println("MarkDown中一共有:" + picturesInMarkdown.size() + "個圖片文件");
                      // 列出 Markdown 文件所在目錄中的圖片名稱
                      File directory=file.getParentFile();
                      String[] extensions={"png", "jpg", "jpeg", "bmp"}; // 圖片擴展名
                      boolean recursive=true; // 不掃描子目錄
                      HashSet<String> picturesInDirectory=new HashSet<String>();
                      //獲取所有文件的集合
                      Collection<File> files=FileUtils.listFiles(directory, extensions, recursive);
                      System.out.println("圖片目錄下一共有:" + files.size() + "個圖片文件");
          
                      for (File picture : files) {
                          String name=picture.getName();
                          picturesInDirectory.add(name);
                      }
          
                      // 列出冗余圖片,并將其刪除
                      picturesInDirectory.removeAll(picturesInMarkdown);
                      int count=0;
                      for (String picture : picturesInDirectory) {
                          String pic=directory.getAbsolutePath() + File.separator + picDir + File.separator + picture;
          
                          System.out.println("刪除圖片:" + pic);
                          FileUtils.deleteQuietly(new File(pic));
                          count++;
                      }
                      System.out.println("操作完成,共刪除了" + count + "個圖片文件!");
                  }
          
                  scanner.close();
                  System.exit(0);
              }
          }

          使用說明

          因為使用Java編寫,使用需要安裝Java虛擬機,為了方便用戶的使用,特意編寫了一個DOS下的命令行

          @echo off
          java -jar markdown-picture-cleaner-1.0.jar
          pause

          1.運行的時候會出現(xiàn)一個窗口,需要輸入Markdown文件的路徑和文件名,這個比較麻煩,但可以將需要清理的文件直接拖到窗口中,則會自動填充文件路徑和文件名

          2.拖到窗口中會自動輸入路徑和文件名

          3.按下回車會讓你輸入圖片的目錄,默認是當前目錄下的assets,如果圖片是在這個目錄下,直接按回車即可。

          4.最后顯示清理的結(jié)果

          最后

          以上是給各位讀者提供了一種思路,大家也可以使用其它語言進行編寫,比如可以直接運行在Windows下的VC或是VB,還有圖形界面,用戶體驗會更好一些。同時軟件本身只提供了基礎功能,作者提供了源代碼,懂Java的朋友可以在這個基礎上去進一步完善。

          公中大家都會用到Word,但是在使用的過程中,我們或多或少會遇到一些問題。今天就挑出最典型的幾個問題,教你怎么解決它們。

          一、圖片問題

          1、插入圖片顯示不全

          大家有沒有遇到這樣的情況,在Word中插入圖片后發(fā)現(xiàn),總是顯示不完整。這樣的情況要怎么解決呢?

          解決方法:

          其實這個問題解決起來也挺簡單的,只需要點擊段落旁邊的斜箭頭符號,進入「段落設置」中。

          再將行距設置為「單倍行距」,點擊「確定」。

          這樣一來,圖片完全顯示出來啦!開不開森?

          2、圖片或圖形對象無法選擇

          想要將Word中的圖片給刪除掉,但是卻發(fā)現(xiàn)無法選擇,怎么辦呢?

          解決方法:

          按「Ctrl + H」打開查找替換,點擊「更多」-「特殊格式」-「圖形」,把替換為設置為空,最后點擊「確定」,圖片就一次性清除啦!

          二、表格問題

          1、表格超出頁面范圍

          從網(wǎng)站或者Excel復制表格到Word,結(jié)果發(fā)現(xiàn)表格超出頁面范圍,部分內(nèi)容被遮擋了,怎么辦?

          解決方法:

          點擊表格左上角的按鈕,全選表格,右鍵選擇「自動調(diào)整」-「根據(jù)窗口自動調(diào)整表格」就可以啦!

          2、Word表格轉(zhuǎn)Excel變形

          Word和Excel都是辦公中經(jīng)常用到的工具,很多時候我們需要將Word中的表格給復制到Excel中,但是若復制過去變形了怎么辦呢?

          解決方法:

          首先,按「F12」鍵,將Word另存為HTML網(wǎng)頁格式。

          然后右鍵點擊HTML文件,選擇「打開方式」為「Excel」,你就會發(fā)現(xiàn)表格顯示正常啦,不會變形。

          三、其他問題

          1、超鏈接很難清除

          你有沒有發(fā)現(xiàn),有時候我們在word中輸入網(wǎng)址或郵箱,它會變成一個藍色的鏈接,若是一個個去掉的話也挺麻煩的。那怎么將它們給批量去掉呢?

          解決方法:

          首先按「Ctrl + A」選中所有文本,然后按「Ctrl + 6」或者「Ctrl + Shift + 9」鍵,就可以讓所有超鏈接消失啦!

          2、空白段落很多如何清除

          一般從網(wǎng)上復制文本到Word中,都會出現(xiàn)很多空白段落,看起來不好看,怎么將它們一次性去除呢?

          解決方法:

          按「Ctrl + H」打開替換框,查找內(nèi)容輸入2個「^p」,替換內(nèi)容輸入1個,全部替換,OK。

          好啦,以上就是Word使用中的幾個技巧了,你們學會了嗎?


          主站蜘蛛池模板: 亚洲av鲁丝一区二区三区| 国产精品538一区二区在线| 夜夜添无码一区二区三区| 91精品一区国产高清在线| 中文字幕一区日韩在线视频 | 国产精品高清一区二区人妖 | 欧洲精品一区二区三区| 免费一区二区无码视频在线播放 | 国产不卡视频一区二区三区| 一区二区三区四区在线观看视频| 精品人妻一区二区三区浪潮在线| 在线观看国产一区二三区| 爱爱帝国亚洲一区二区三区| 一区二区三区四区在线播放| 国产av一区二区三区日韩| 亚洲日韩AV一区二区三区中文 | 亚洲色欲一区二区三区在线观看| 日韩高清国产一区在线| 无码一区二区三区在线| 国产成人精品无人区一区 | 日本精品一区二区三区在线视频一| 精品乱子伦一区二区三区高清免费播放| 国产一区二区三区夜色| 国产吧一区在线视频| 国产精品被窝福利一区 | 亚洲AV成人一区二区三区AV| 亚洲欧美日韩中文字幕在线一区| 国产一区二区精品久久91 | 91久久精品国产免费一区| 国产福利在线观看一区二区| 国产高清视频一区三区| 国产日韩精品一区二区在线观看播放 | 一区二区三区在线|欧| 国产在线一区二区视频| 一区二区精品在线| 亚洲av区一区二区三| 亚洲一区AV无码少妇电影| 台湾无码AV一区二区三区| 性色av无码免费一区二区三区| 国产日韩精品一区二区三区在线| 国产熟女一区二区三区五月婷|