鱼C论坛

 找回密码
 立即注册
查看: 104|回复: 4

[已解决]划分txt失败,没办法了求助

[复制链接]
发表于 2024-10-1 22:49:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
需要将附件的txt文件用pandas转化到excel中,需要转换的数据如下
/锅炉定排80-CBD-5310-30002-B1TB51-H(GC2)      INST  /XV-5310038     E 26580.15mm N 7290mm U 11823mm           /锅炉定排80-CBD-5310-30002-B1TB51-H(GC2)/B2
  /锅炉给水50-LBW-5310-30001-B1TB51-H(锅炉)       INST  /TE-5310015     E 27045.424mm N 10029mm U 15031.8mm       /锅炉给水50-LBW-5310-30001-B1TB51-H(锅炉)/B4
  /锅炉给水50-LBW-5310-30001-B1TB51-H(锅炉)       INST  /PG-5310043     E 27045.424mm N 9563mm U 15163.15mm       /锅炉给水50-LBW-5310-30001-B1TB51-H(锅炉)/B3
  /锅炉给水50-LBW-5310-30001-B1TB51-H(锅炉)       INST  /FT-5310017     E 33150mm S 1248.6mm U 5117.15mm          /锅炉给水50-LBW-5310-30001-B1TB51-H(锅炉)/B2
  /锅炉给水50-LBW-5310-30001-B1TB51-H(锅炉)       INST  /LV-5310001     E 27045.424mm N 8489.5mm U 14792.15mm     /锅炉给水50-LBW-5310-30001-B1TB51-H(锅炉)/B2

把上面的内容按照各个数据列之间的空格隔开,填到excel中就行。失败的代码如下
#这个程序的目的是用来自动填写pdms的仪表坐标

import tkinter as tk
from tkinter import filedialog
import pandas as pd
from openpyxl import Workbook

def select_txt_file():
    txt_file = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    return txt_file

def select_output_folder():
    output_folder = filedialog.askdirectory()
    return output_folder

def main():
    root = tk.Tk()
    root.withdraw()
    # 选择txt文件
    txt_file = select_txt_file()
    # 选择输出文件夹
    output_folder = select_output_folder()    
    data = pd.read_csv(txt_file, sep=' ', header=None)
    # 将DataFrame写入Excel文件
    excel_file = f"{output_folder}/转换后excel.xlsx"
    df.to_excel(excel_file, index=False)

if __name__ == "__main__":
    main()
最佳答案
2024-10-1 22:56:45
颂风侯 发表于 2024-10-01 22:56
还是失败,错误报告如下:
Traceback (most recent c ...


您好,您遇到的报错是由于读取文件时编码问题引起的。默认情况下,`readlines` 使用系统默认编码(通常是 `gbk`),而文件可能是用其他编码格式(例如 `utf-8`)保存的。

我们可以在读取文件时指定文件编码来解决这个问题。此外,前面还存在一些问题没有进行修正,我们一起修改一下代码。
# 这个程序的目的是用来自动填写pdms的仪表坐标

import tkinter as tk
from tkinter import filedialog
import pandas as pd
import re

def select_txt_file():
    txt_file = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    return txt_file

def select_output_folder():
    output_folder = filedialog.askdirectory()
    return output_folder

def main():
    root = tk.Tk()
    root.withdraw()
    # 选择txt文件
    txt_file = select_txt_file()
    # 选择输出文件夹
    output_folder = select_output_folder()    

    # 读取txt文件,使用合适的编码,例如utf-8
    with open(txt_file, 'r', encoding='utf-8') as file:
        lines = file.readlines()

    # 去掉首位的空白符
    lines = [line.strip() for line in lines]
    
    # 使用正则表达式分割每行数据
    data = [re.split(r'\s{2,}', line) for line in lines]
    
    # 创建DataFrame
    df = pd.DataFrame(data)
    
    # 将DataFrame写入Excel文件
    excel_file = f"{output_folder}/转换后excel.xlsx"
    df.to_excel(excel_file, index=False, header=False)

if __name__ == "__main__":
    main()

关键点:

1. **编码问题**:指定文件读取时使用 `utf-8` 编码。
2. **文件类型选项**:`filetypes` 参数指定为 `("Text files", "*.txt")` 格式。
3. **处理多空格分割**:使用正则表达式 `re.split(r'\s{2,}', line)`,以处理多个空格作为分隔符的情况。

这样处理后,应该可以正确读取文件并将内容转化为Excel表格。如果您的文件采用其他编码,请将 `encoding='utf-8'` 改为对应的编码格式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

11.TXT

25.25 KB, 下载次数: 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-1 22:49:38 | 显示全部楼层
鱼油你好,你的代码有几点小问题,我们来一步步改进一下。

1. `filedialog.askopenfilename(filetypes=)` 这行代码中,`filetypes`的括号里是空的,应该指定文件类型。
2. `csv`文件中用空格分割时,遇到多个连续空格会被当作多个分隔符处理,所以需要特殊处理。
3. `df`变量在将数据写入Excel前并没有定义,这要改成使用`data`。

以下是完善后的代码:
import tkinter as tk
from tkinter import filedialog
import pandas as pd

def select_txt_file():
    # 指定打开文件类型为txt
    txt_file = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("All files", "*.*")))
    return txt_file

def select_output_folder():
    return filedialog.askdirectory()

def main():
    root = tk.Tk()
    root.withdraw()
    
    # 选择txt文件
    txt_file = select_txt_file()
    
    # 选择输出文件夹
    output_folder = select_output_folder()

    # 读取txt文件
    with open(txt_file, 'r') as file:
        lines = file.readlines()

    # 处理txt文件每行的内容
    data = []
    for line in lines:
        # 将每行按多个空格分隔开来
        parts = line.split()
        if parts:  # 确保行不为空
            data.append(parts)
    
    # 将数据转换为DataFrame
    df = pd.DataFrame(data)
    
    # 将DataFrame写入Excel文件
    excel_file = f"{output_folder}/converted_excel.xlsx"
    df.to_excel(excel_file, index=False, header=False)

if __name__ == "__main__":
    main()

这个代码应该可以正确读取txt文件并将其转换为Excel文件。如果数据需要进一步清理或者在转换过程中遇到特殊情况,可以根据实际需求进行调整。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-10-1 22:56:36 | 显示全部楼层
还是失败,错误报告如下:
Traceback (most recent call last):
  File "D:\PYTHON_NEW\pack20240926\pythonProject1\insrt_sheet_cad.py", line 42, in <module>
    main()
  File "D:\PYTHON_NEW\pack20240926\pythonProject1\insrt_sheet_cad.py", line 25, in main
    lines = file.readlines()
            ^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'gbk' codec can't decode byte 0x94 in position 1329: illegal multibyte sequence
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-1 22:56:45 | 显示全部楼层    本楼为最佳答案   
颂风侯 发表于 2024-10-01 22:56
还是失败,错误报告如下:
Traceback (most recent c ...


您好,您遇到的报错是由于读取文件时编码问题引起的。默认情况下,`readlines` 使用系统默认编码(通常是 `gbk`),而文件可能是用其他编码格式(例如 `utf-8`)保存的。

我们可以在读取文件时指定文件编码来解决这个问题。此外,前面还存在一些问题没有进行修正,我们一起修改一下代码。
# 这个程序的目的是用来自动填写pdms的仪表坐标

import tkinter as tk
from tkinter import filedialog
import pandas as pd
import re

def select_txt_file():
    txt_file = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    return txt_file

def select_output_folder():
    output_folder = filedialog.askdirectory()
    return output_folder

def main():
    root = tk.Tk()
    root.withdraw()
    # 选择txt文件
    txt_file = select_txt_file()
    # 选择输出文件夹
    output_folder = select_output_folder()    

    # 读取txt文件,使用合适的编码,例如utf-8
    with open(txt_file, 'r', encoding='utf-8') as file:
        lines = file.readlines()

    # 去掉首位的空白符
    lines = [line.strip() for line in lines]
    
    # 使用正则表达式分割每行数据
    data = [re.split(r'\s{2,}', line) for line in lines]
    
    # 创建DataFrame
    df = pd.DataFrame(data)
    
    # 将DataFrame写入Excel文件
    excel_file = f"{output_folder}/转换后excel.xlsx"
    df.to_excel(excel_file, index=False, header=False)

if __name__ == "__main__":
    main()

关键点:

1. **编码问题**:指定文件读取时使用 `utf-8` 编码。
2. **文件类型选项**:`filetypes` 参数指定为 `("Text files", "*.txt")` 格式。
3. **处理多空格分割**:使用正则表达式 `re.split(r'\s{2,}', line)`,以处理多个空格作为分隔符的情况。

这样处理后,应该可以正确读取文件并将内容转化为Excel表格。如果您的文件采用其他编码,请将 `encoding='utf-8'` 改为对应的编码格式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-1 22:58:49 | 显示全部楼层
终于成功了,唉,ai实在太强了,我就是一头猪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-12 16:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表