影刀RPA 文本文件的读写:TXT、CSV、JSON的读取与写入

发布时间:2026/7/18 3:41:15
影刀RPA 文本文件的读写:TXT、CSV、JSON的读取与写入 影刀RPA 文本文件的读写TXT、CSV、JSON的读取与写入作者林焱Excel不是唯一的数据存储格式。很多场景下你需要处理文本文件——日志文件是TXT、导出的数据是CSV、API返回的数据是JSON。影刀RPA在处理这些文本文件时主要依赖Python节点的文件操作能力。这篇文章把TXT、CSV、JSON三种最常见文本格式的读写方法讲全。一、TXT文件读写1.1 读取TXT文件# 读取整个文件withopen(D:\\data\\log.txt,r,encodingutf-8)asf:contentf.read()set_variable(file_content,content)# 逐行读取withopen(D:\\data\\log.txt,r,encodingutf-8)asf:linesf.readlines()set_variable(file_lines,lines)# 逐行处理大文件推荐result[]withopen(D:\\data\\log.txt,r,encodingutf-8)asf:forlineinf:lineline.strip()# 去掉行尾换行符ifline:result.append(line)set_variable(processed_lines,result)坑1编码问题文件编码可能是UTF-8、GBK、GB2312等。用错误的编码打开会乱码或报错。# 自动检测编码importchardetwithopen(D:\\data\\log.txt,rb)asf:rawf.read()encodingchardet.detect(raw)[encoding]withopen(D:\\data\\log.txt,r,encodingencoding)asf:contentf.read()坑2BOM头UTF-8 with BOM的文件开头有一个\ufeff字符读取后内容开头会多一个不可见字符。用utf-8-sig编码打开自动去掉BOMwithopen(D:\\data\\log.txt,r,encodingutf-8-sig)asf:contentf.read()![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3c3a9af1f0df447a8ac4faffc8d12a8a.png#pic_center)1.2 写入TXT文件# 覆盖写入withopen(D:\\data\\output.txt,w,encodingutf-8)asf:f.write(第一行内容\n)f.write(第二行内容\n)# 追加写入withopen(D:\\data\\log.txt,a,encodingutf-8)asf:f.write(新追加的内容\n)# 写入多行lines[第一行,第二行,第三行]withopen(D:\\data\\output.txt,w,encodingutf-8)asf:f.write(\n.join(lines))坑写入后没换行f.write(内容)不会自动加换行符需要手动加\n。如果用print函数写文件会自动加换行withopen(D:\\data\\output.txt,w,encodingutf-8)asf:print(第一行,filef)print(第二行,filef)1.3 TXT文件处理实战拼多多店群自动化上架方案# 日志文件解析importrewithopen(D:\\logs\\app.log,r,encodingutf-8)asf:logsf.readlines()# 提取ERROR级别的日志errors[]forlineinlogs:ifERRORinline:# 提取时间和错误信息matchre.match(r\[(.*?)\] ERROR (.*),line)ifmatch:errors.append({time:match.group(1),message:match.group(2)})set_variable(error_logs,errors)二、CSV文件读写2.1 用csv模块读取importcsv# 读取CSV文件withopen(D:\\data\\products.csv,r,encodingutf-8-sig)asf:readercsv.reader(f)headersnext(reader)# 第一行是表头data[rowforrowinreader]# data是一个二维列表# data[0] [商品A, 99.9, 100]set_variable(csv_headers,headers)set_variable(csv_data,data)2.2 用DictReader读取推荐importcsvwithopen(D:\\data\\products.csv,r,encodingutf-8-sig)asf:readercsv.DictReader(f)data[dict(row)forrowinreader]# data是一个字典列表# data[0] {商品名: 商品A, 价格: 99.9, 库存: 100}set_variable(csv_data,data)2.3 用pandas读取CSV最推荐importpandasaspd# 基本读取dfpd.read_csv(D:\\data\\products.csv,encodingutf-8-sig)# 指定分隔符TSV文件用制表符dfpd.read_csv(D:\\data\\products.tsv,sep\t)# 跳过前几行dfpd.read_csv(D:\\data\\products.csv,skiprows2)# 指定列名dfpd.read_csv(D:\\data\\products.csv,names[名称,价格,库存],headerNone)# 指定某列为索引dfpd.read_csv(D:\\data\\products.csv,index_col商品ID)# 数据类型转换dfpd.read_csv(D:\\data\\products.csv,dtype{价格:float,库存:int})set_variable(csv_data,df.to_dict(records))2.4 写入CSVimportcsv dataget_variable(output_data)headers[商品名,价格,库存]withopen(D:\\data\\output.csv,w,encodingutf-8-sig,newline)asf:writercsv.DictWriter(f,fieldnamesheaders)writer.writeheader()writer.writerows(data)坑1newline参数Windows下写CSV必须加newline否则每行之间会多一个空行。坑2逗号在数据中CSV用逗号分隔字段如果数据本身包含逗号如商品A,蓝色需要用引号包裹。csv模块自动处理# csv.writer会自动给包含逗号的数据加引号writer.writerow([商品A,蓝色,99.9,100])# 输出: 商品A,蓝色,99.9,100坑3CSV编码问题Excel打开UTF-8编码的CSV文件会乱码。用utf-8-sig编码写入带BOM头Excel就能正确识别withopen(D:\\data\\output.csv,w,encodingutf-8-sig,newline)asf:2.5 CSV与Excel互转importpandasaspd# CSV转Exceldfpd.read_csv(D:\\data\\products.csv,encodingutf-8-sig)df.to_excel(D:\\data\\products.xlsx,indexFalse)# Excel转CSVdfpd.read_excel(D:\\data\\products.xlsx)df.to_csv(D:\\data\\products.csv,indexFalse,encodingutf-8-sig)三、JSON文件读写3.1 读取JSON文件importjsonwithopen(D:\\data\\config.json,r,encodingutf-8)asf:configjson.load(f)# config是一个字典# {server: 192.168.1.1, port: 8080, debug: true}set_variable(config,config)3.2 写入JSON文件importjson dataget_variable(output_data)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/eb283a5a4cb8420ab5ece4d80bc0d01e.png#pic_center)withopen(D:\\data\\output.json,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)坑1ensure_ascii参数json.dump默认ensure_asciiTrue中文字符会被转义成\uXXXX。设置ensure_asciiFalse保留中文# ensure_asciiTrue默认: {name: \u5546\u54c1A}# ensure_asciiFalse: {name: 商品A}json.dump(data,f,ensure_asciiFalse,indent2)坑2indent参数indent2让JSON输出有缩进方便人阅读。不设置indent则输出紧凑格式文件更小但不可读。3.3 JSON与Python对象的转换importjson# Python字典 → JSON字符串data{name:商品A,price:99.9,tags:[热销,推荐]}json_strjson.dumps(data,ensure_asciiFalse)# JSON字符串 → Python字典parsedjson.loads(json_str)# 嵌套JSON处理nested{product:{name:商品A,variants:[{color:红,stock:10},{color:蓝,stock:20}]}}# 访问嵌套数据forvariantinnested[product][variants]:print(f{variant[color]}:{variant[stock]})3.4 JSON作为配置文件importjson# 读取配置withopen(D:\\config\\settings.json,r,encodingutf-8)asf:configjson.load(f)# 使用配置serverconfig.get(server,localhost)# 默认值localhostportconfig.get(port,8080)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8d276b553730473788516f2e0ae8e44b.png#pic_center)timeoutconfig.get(timeout,30)retry_countconfig.get(retry,3)# 修改配置并保存config[last_run]2026-07-01withopen(D:\\config\\settings.json,w,encodingutf-8)asf:json.dump(config,f,ensure_asciiFalse,indent2)坑JSON不支持注释标准JSON格式不支持注释。如果配置文件需要注释用JSON5格式或YAML或者在配置字段里加_comment字段{_comment:这是服务器配置,server:192.168.1.1,port:8080}四、格式选择指南TEMU店群如何管理运营格式适合场景优势劣势TXT日志、简单文本最简单无结构CSV表格数据通用、Excel兼容无类型、无嵌套JSON配置、API数据有结构、支持嵌套比CSV冗余Excel报表、复杂表格有格式、有公式二进制、依赖库五、实战场景5.1 API响应保存为JSONimportjsonimportrequests responserequests.get(https://api.example.com/products)dataresponse.json()# 保存到文件withopen(D:\\data\\api_response.json,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)# 提取需要的数据转成CSVimportpandasaspd dfpd.DataFrame(data[products])df.to_csv(D:\\data\\products.csv,indexFalse,encodingutf-8-sig)5.2 多格式数据合并importjsonimportpandasaspd# 从JSON读取withopen(D:\\data\\api_data.json,r,encodingutf-8)asf:json_datajson.load(f)df_apipd.DataFrame(json_data[products])# 从CSV读取df_csvpd.read_csv(D:\\data\\local_data.csv,encodingutf-8-sig)# 从Excel读取df_excelpd.read_excel(D:\\data\\manual.xlsx)# 合并所有数据df_allpd.concat([df_api,df_csv,df_excel],ignore_indexTrue)# 输出为Exceldf_all.to_excel(D:\\data\\merged.xlsx,indexFalse)5.3 日志写入fromdatetimeimportdatetimedefwrite_log(message,levelINFO):写入日志文件timestampdatetime.now().strftime(%Y-%m-%d %H:%M:%S)log_linef[{timestamp}] [{level}]{message}\nwithopen(D:\\logs\\rpa.log,a,encodingutf-8)asf:f.write(log_line)# 使用write_log(流程开始执行)write_log(采集到50条数据,INFO)write_log(网站连接超时,ERROR)write_log(流程执行完毕)六、避坑清单坑1文件操作后忘记关闭不使用with语句时文件需要手动f.close()。如果忘记关闭文件锁不释放其他操作会报错。永远用with open(...) as f自动管理。坑2大文件一次性读取几百MB的日志文件一次性f.read()会占用大量内存。逐行读取更安全withopen(big_file.log,r)asf:forlineinf:process(line)坑3CSV中的数字变成文本CSV没有数据类型所有值都是文本。用pandas读取时指定数据类型dfpd.read_csv(data.csv,dtype{价格:float,库存:int})坑4JSON序列化失败Python对象中包含日期、自定义类等无法直接序列化为JSON。需要先转换fromdatetimeimportdatetime data{date:datetime.now().isoformat()}# 日期转字符串json.dumps(data)坑5并发写入冲突多个流程同时写同一个文件数据会错乱。用文件锁或者分文件写入。