最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)據(jù)清洗之抽取jsonl文件數(shù)據(jù)字段并合并

 更新時(shí)間:2025年03月26日 08:49:49   作者:Atlas Shepherd  
這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)清洗之抽取jsonl文件數(shù)據(jù)字段并合并的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

基于python抽取目錄下所有“jsonl”格式文件。遍歷文件內(nèi)某個(gè)字段進(jìn)行抽取并合并。

實(shí)現(xiàn)代碼

import os
import json
import time
from tqdm import tqdm  # 需要先安裝:pip install tqdm
 
 
def process_files():
    # 設(shè)置目錄路徑
    dir_path = r"D:\daku\關(guān)鍵詞識(shí)別\1623-0000001\zh"
 
    # 獲取并排序文件列表
    file_list = sorted([f for f in os.listdir(dir_path) if f.lower().endswith('.jsonl')],
                       key=lambda x: os.path.getsize(os.path.join(dir_path, x)),
                       reverse=True)  # 按文件大小降序排列
 
    # 進(jìn)度統(tǒng)計(jì)
    total_files = len(file_list)
    processed_files = 0
    total_lines = sum(1 for f in file_list for _ in open(os.path.join(dir_path, f), 'r', encoding='utf-8'))
    processed_lines = 0
    start_time = time.time()
 
    # 輸出文件設(shè)置
    output_file = os.path.join(dir_path, "combined_contents.txt")
 
    with open(output_file, "w", encoding="utf-8") as outfile:
        with tqdm(total=total_lines, desc="合并進(jìn)度", unit="line") as pbar:
            for filename in file_list:
                file_path = os.path.join(dir_path, filename)
                try:
                    with open(file_path, "r", encoding="utf-8") as infile:
                        file_size = os.path.getsize(file_path)
                        chunk_size = max(1024 * 1024, file_size // 100)  # 動(dòng)態(tài)調(diào)整讀取塊大小
 
                        while True:
                            lines = infile.readlines(chunk_size)
                            if not lines:
                                break
 
                            for line_num, line in enumerate(lines, 1):
                                line = line.strip()
                                if not line:
                                    continue
 
                                try:
                                    data = json.loads(line)
                                    content = data.get("content", "").replace("\n", " ")  # 清除內(nèi)容中的換行符
                                    outfile.write(content + "\n\n")  # 用雙換行分隔記錄
                                    processed_lines += 1
                                except json.JSONDecodeError:
                                    print(f"\nJSON解析失敗: {filename} 第{processed_lines + 1}行")
                                except Exception as e:
                                    print(f"\n處理異常: {filename} 第{processed_lines + 1}行 - {str(e)}")
 
                                # 進(jìn)度更新
                                pbar.update(1)
                                if processed_lines % 1000 == 0:
                                    elapsed = time.time() - start_time
                                    speed = processed_lines / (elapsed + 1e-5)
                                    remaining = (total_lines - processed_lines) / (speed + 1e-5)
                                    pbar.set_postfix({
                                        '速度': f"{speed:.1f} lines/s",
                                        '剩余時(shí)間': f"{remaining // 3600:.0f}h {remaining % 3600 // 60:.0f}m"
                                    })
 
                    processed_files += 1
                except Exception as e:
                    print(f"\n無(wú)法讀取文件 {filename}: {str(e)}")
 
    # 生成統(tǒng)計(jì)報(bào)告
    end_time = time.time()
    print(f"\n合并完成!共處理 {processed_files}/{total_files} 個(gè)文件")
    print(f"總記錄數(shù): {processed_lines:,} 條")
    print(f"耗時(shí): {end_time - start_time:.2f} 秒")
    print(f"輸出文件路徑: {output_file}")
 
 
if __name__ == "__main__":
    process_files()

知識(shí)延展:

1.Python中json文件和jsonl文件的區(qū)別

眾所周知,JSON 文件是使用 JSON(JavaScript Object Notation)格式存儲(chǔ)數(shù)據(jù)的文件。它是一種結(jié)構(gòu)化的文本格式,使用鍵值對(duì)的方式表示數(shù)據(jù)。JSON 文件通常包含一個(gè)根對(duì)象,可以包含多個(gè)嵌套的對(duì)象、數(shù)組和基本數(shù)據(jù)類型。

而 JSONL 文件(JSON Lines),則是一種每行包含一個(gè)獨(dú)立的 JSON 對(duì)象的文本文件格式。每行都是一個(gè)有效的 JSON 對(duì)象,和json的"list dict"不一樣,jsonl的話沒(méi)有"list",只有一行行的“dict”,使用換行符分隔。相比于 JSON 文件,JSONL 文件更加輕量,每行為獨(dú)立的 JSON 對(duì)象,沒(méi)有逗號(hào)或其他分隔符。這樣的好處是方便一行行讀取,而不用像json一樣只能一次性把"list"里面的"dict”全部都讀出來(lái),節(jié)省了內(nèi)存吧,并且還能增加可讀性,普通的json文件打開(kāi)之后會(huì)亂糟糟一團(tuán)。jsonl的話需要pip安裝一個(gè)jsonlines包。

JSON文件的內(nèi)容示例:

[{"name": "John", "age": 30},
{"name": "Jane", "age": 25},
{"name": "Bob", "age": 40}]

JSONL文件的內(nèi)容示例:

{"name": "John", "age": 30}
{"name": "Jane", "age": 25}
{"name": "Bob", "age": 40}

主要區(qū)別如下:

JSON 文件:

  • 使用大括號(hào) {} 表示對(duì)象,使用方括號(hào) [] 表示數(shù)組。
  • 整個(gè)文件是一個(gè)有效的 JSON 對(duì)象或數(shù)組。
  • 適合存儲(chǔ)結(jié)構(gòu)化的數(shù)據(jù),如配置文件、API 響應(yīng)等。
  • 一次性讀取整個(gè)文件,解析成一個(gè) JSON 對(duì)象,可以隨機(jī)訪問(wèn)其中的數(shù)據(jù)。

JSONL 文件:

  • 每行是一個(gè)獨(dú)立的有效 JSON 對(duì)象。
  • 每行之間沒(méi)有逗號(hào)或其他分隔符。
  • 適合存儲(chǔ)每行為獨(dú)立記錄的數(shù)據(jù),如日志、傳感器數(shù)據(jù)、日志行等。
  • 逐行讀取文件,逐行解析 JSON 對(duì)象,一次處理一行的數(shù)據(jù)。

JSONL 文件適合用于以下情況:

  • 當(dāng)數(shù)據(jù)以行為單位獨(dú)立存儲(chǔ),并且每行數(shù)據(jù)之間沒(méi)有明確的分隔符時(shí)。
  • 當(dāng)需要逐行處理數(shù)據(jù),以節(jié)省內(nèi)存和提高處理速度時(shí)。
  • 當(dāng)數(shù)據(jù)量非常大,無(wú)法一次性加載到內(nèi)存中時(shí),JSONL 格式提供了一種流式處理數(shù)據(jù)的方式。

這么對(duì)比下來(lái),JSON 文件更適合結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)和傳輸,而 JSONL 文件更適合每行為獨(dú)立記錄的數(shù)據(jù)存儲(chǔ)和處理。

到此這篇關(guān)于Python中json文件和jsonl文件的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)Python json文件和jsonl文件區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

2.抽取多個(gè)文本格式內(nèi)容進(jìn)行合并

即抽取目錄下多個(gè)文本多個(gè)格式文件,進(jìn)行合并并去重。

實(shí)現(xiàn)代碼

import os
from chardet import detect
 
 
def get_safe_encoding(encoding):
    """將檢測(cè)到的編碼轉(zhuǎn)換為更安全的兼容編碼"""
    encoding = encoding.lower()
    if encoding in ['gb2312', 'gbk']:
        return 'gb18030'  # 最全面的中文編碼
    return encoding
 
 
def get_file_encoding(file_path):
    """獲取文件編碼并自動(dòng)升級(jí)到更安全的版本"""
    with open(file_path, 'rb') as f:
        raw_data = f.read(10000)
    result = detect(raw_data)
    # 過(guò)濾低置信度檢測(cè)(confidence<0.8則視為不可信)
    if result['confidence'] < 0.8:
        return 'gb18030'
    return get_safe_encoding(result['encoding'])
 
 
def merge_files(directory, output_filename='merged.txt'):
    seen_lines = set()
    output_path = os.path.join(directory, output_filename)
 
    txt_files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.txt')]
 
    with open(output_path, 'w', encoding='utf-8', errors='ignore') as outfile:
        for file_path in txt_files:
            try:
                # 獲取安全編碼并添加錯(cuò)誤處理
                file_enc = get_file_encoding(file_path)
                with open(file_path, 'r',
                          encoding=file_enc,
                          errors='backslashreplace') as infile:  # 保留無(wú)法解碼字符
                    for line_idx, line in enumerate(infile, 1):
                        try:
                            stripped_line = line.rstrip('\n')
                            if stripped_line not in seen_lines:
                                outfile.write(line)
                                seen_lines.add(stripped_line)
                        except Exception as line_err:
                            print(f"文件 {os.path.basename(file_path)} 第 {line_idx} 行處理異常: {str(line_err)}")
                            continue
            except Exception as file_err:
                print(f"文件 {os.path.basename(file_path)} 讀取失敗: {str(file_err)}")
                continue
 
 
if __name__ == '__main__':
    target_directory = r'D:\daku\關(guān)鍵詞識(shí)別\stop6931'
    merge_files(target_directory)
    print(f'合并完成,輸出文件:{os.path.join(target_directory, "merged.txt")}')

到此這篇關(guān)于Python數(shù)據(jù)清洗之抽取jsonl文件數(shù)據(jù)字段并合并的文章就介紹到這了,更多相關(guān)Python抽取jsonl數(shù)據(jù)字段內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)對(duì)圖片進(jìn)行旋轉(zhuǎn),放縮,裁剪的功能

    python實(shí)現(xiàn)對(duì)圖片進(jìn)行旋轉(zhuǎn),放縮,裁剪的功能

    今天小編就為大家分享一篇python實(shí)現(xiàn)對(duì)圖片進(jìn)行旋轉(zhuǎn),放縮,裁剪的功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • pytorch中with?torch.no_grad():的用法實(shí)例

    pytorch中with?torch.no_grad():的用法實(shí)例

    最近在看別人寫(xiě)的代碼,遇到經(jīng)常使用with torch.no_grad(),所以下面這篇文章主要給大家介紹了關(guān)于pytorch中with?torch.no_grad():用法的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Python3獲取電腦IP、主機(jī)名、Mac地址的方法示例

    Python3獲取電腦IP、主機(jī)名、Mac地址的方法示例

    這篇文章主要介紹了Python3獲取電腦IP、主機(jī)名、Mac地址的方法,結(jié)合具體實(shí)例形式分析了Python3基于socket與uuid模塊針對(duì)電腦的IP、主機(jī)名、Mac地址等信息的讀取操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04
  • Pytorch中transforms.Resize()的簡(jiǎn)單使用

    Pytorch中transforms.Resize()的簡(jiǎn)單使用

    這篇文章主要介紹了Pytorch中transforms.Resize()的簡(jiǎn)單使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 詳解使用python爬取抖音app視頻(appium可以操控手機(jī))

    詳解使用python爬取抖音app視頻(appium可以操控手機(jī))

    這篇文章主要介紹了詳解使用python爬取抖音app視頻(appium可以操控手機(jī)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python進(jìn)程和線程用法知識(shí)點(diǎn)總結(jié)

    python進(jìn)程和線程用法知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了關(guān)于python進(jìn)程和線程用法以及相關(guān)實(shí)例內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • Python異步之迭代器如何使用詳解

    Python異步之迭代器如何使用詳解

    這篇文章主要為大家介紹了Python異步之迭代器如何使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Python文件的讀寫(xiě)和異常代碼示例

    Python文件的讀寫(xiě)和異常代碼示例

    這篇文章主要介紹了Python文件的讀寫(xiě)和異常代碼示例,首先分享了文件讀寫(xiě)的簡(jiǎn)單方法,然后略為詳細(xì)地介紹了Python異常的相關(guān)內(nèi)容,不足之處,歡迎補(bǔ)充。
    2017-10-10
  • Python pickle模塊用法實(shí)例

    Python pickle模塊用法實(shí)例

    這篇文章主要介紹了Python pickle模塊用法實(shí)例,python的pickle模塊實(shí)現(xiàn)了基本的數(shù)據(jù)序列和反序列化,需要的朋友可以參考下
    2015-04-04
  • 【python】matplotlib動(dòng)態(tài)顯示詳解

    【python】matplotlib動(dòng)態(tài)顯示詳解

    這篇文章主要介紹了matplotlib動(dòng)態(tài)顯示,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

久治县| 黑河市| 莱州市| 嘉祥县| 宜兰市| 泗阳县| 佛山市| 元朗区| 泸西县| 建阳市| 烟台市| 阳城县| 新巴尔虎右旗| 无极县| 东丰县| 敦化市| 巩义市| 抚州市| 木兰县| 鹿泉市| 镇安县| 甘泉县| 新化县| 平武县| 乐平市| 禹城市| 临湘市| 宁都县| 鹤岗市| 班戈县| 招远市| 申扎县| 玉树县| 延安市| 徐闻县| 大埔县| 马鞍山市| 梓潼县| 阿克陶县| 灵石县| 当阳市|