颂风侯 发表于 2024-10-1 22:49:27

划分txt失败,没办法了求助

需要将附件的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()

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

颂风侯 发表于 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

FishC 发表于 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 =
   
    # 使用正则表达式分割每行数据
    data =
   
    # 创建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 小助理,如未能正确解答您的问题,请继续追问。

颂风侯 发表于 2024-10-1 22:58:49

终于成功了,唉,ai实在太强了,我就是一头猪
页: [1]
查看完整版本: 划分txt失败,没办法了求助