# 读取CSV文件并指定编码方式为latin-1
with open('input.csv', 'r', encoding='latin-1') as csv_file:
csv_reader = csv.reader(csv_file)
data = list(csv_reader)
# 确定每列最长的长度
max_lengths = [max(len(row[i]) for row in data) for i in range(len(data[0]))]
# 写入TXT文件并保持对齐
with open('output.txt', 'w', encoding='utf-8') as txt_file:
for row in data:
txt_file.write(' '.join(cell.ljust(max_lengths[i] + 2) for i, cell in enumerate(row)) + '\n')
小弟用上面这方法还是无法完整对齐。
使用Pixie大佬的工具
cmder
VIctoryRoad大佬的指令
cat 源文件.csv | column -t -s "," > 目标文件.txt
可以再配合小弟的批次
@echo off
REM 提示用户输入 CSV 档案的完整路径
set /p csv_file=请输入CSV档案的完整路径(例如:C:\path\to\file.csv):
REM 验证输入的 CSV 档案是否存在
if not exist "%csv_file%" (
echo 错误:指定的档案不存在。
pause
exit /b
REM 获取 CSV 档案所在的目录路径
for %%F in ("%csv_file%") do (
set "csv_dir=%%~dpF"
REM 提示用户输入输出的 TXT 档名
set /p txt_file=请输入输出的TXT档名(例如:output.txt):
REM 构建输出的 TXT 档案的完整路径
set "txt_path=%csv_dir%%txt_file%"
REM 执行命令
type "%csv_file%" | column -t -s "," > "%txt_path%"
echo 操作已完成。结果已储存到 %txt_path%。
pause
就可以完成
CSV TO TXT 不对齐的问题
1 2 3
11 22 33
111 222 333
按 Ctrl + A 选中所有内容,然后按 Ctrl + C 复制
打开记事本(notepad),按Ctrl + V 粘贴
点击 文件→保存,保存 txt 文本文档,并将 “编码” 设置为 “UTF-8”
另外稍微提一下马新简体和中国大陆简体之间的区别:
ot1686:
有没有辨法
大陆简体中,“辦”对应的简体字是“办”。而“辨”字读biàn,常取辨别、分辨之意。
“辨”和“办”都有异体字“辦”,但办、辨似乎不互通。
ot1686:
并支援UTF-8
“支援”在大陆简体中的含义是给予帮助(give aid to someone)。如果您想表达 support/have the ability to achieve special function 这种含义,大陆简体字一般用“支持”。
VSCode 的 Rainbow CSV 扩展有一个对齐特性: Align columns with spaces and Shrink (trim spaces from fields).
打开 csv 文件后:
点击状态栏的 Align 按钮即可对齐。
点击状态栏的编码按钮即可以 UTF-8 保存当前文件。
def convert_csv_to_txt(input_file, output_file):
# 使用chardet檢測檔案編碼
with open(input_file, 'rb') as f:
rawdata = f.read()
encoding = chardet.detect(rawdata)['encoding']
with open(input_file, 'r', encoding=encoding) as csv_file:
csv_reader = csv.reader(csv_file)
data = list(csv_reader)
# 找到每個欄位的最大寬度
max_lengths = [max(len(row[i]) for row in data) for i in range(len(data[0]))]
with open(output_file, 'w', encoding=encoding) as txt_file:
for row in data:
# 構建每一列的格式化字串,使用固定寬度的空格對齊每一欄
formatted_row = ' | '.join(cell.ljust(max_lengths[i]) for i, cell in enumerate(row))
txt_file.write(formatted_row + '\n')
# 輸入檔案名稱
input_file = 'input.csv'
output_file = 'output.txt'
# 呼叫函式進行轉換
convert_csv_to_txt(input_file, output_file)
大致上用notepad++可以解决问题但还不是很完美
for index, row in df.iterrows():
cell = row[col]
length = sum(2 if ord(c) >= 0x4e00 and ord(c) <= 0x9fff else 1 for c in cell)
if length > max_length:
max_length = length
lengths.append(max_length)
# 按照第二步的数据,将每个单元格的内容右对齐
formatted_df = df.copy()
for i, col in enumerate(formatted_df.columns):
formatted_df[col] = formatted_df[col].apply(lambda x: x.rjust(lengths[i]))
# 将格式化后的数据写入out.txt文件
formatted_df.to_csv('out.txt', index=False, header=True)
手头没有电脑,用ai搓了一个,大体逻辑没问题,如果跑不了我晚上抽空改改再
用python的pandas库帮我写一个程序,要求如下:
1,读取一个本地的csv文件作为df数据,文件编码为latin-1
2,将该数据库的所有单元格内容转换为文本格式
3,分别计算每一列中的单元格内最长内容的长度(注意,每个汉字及中文标点记为2个字符长度,其他英文字符记为1个字符长度)
3,按照第二步的数据,将每个单元格的内容右对齐
4,以csv的格式输出该文件为out.txt
a,b,c
中英文 空格124,test,qq
上面的csv将被格式化为
a, b, c
中英文 空格124,test,qq
另,为何不使用几乎万能的pandas呢
windows 不用安装 WSL 这么麻烦吧,下载个 git for windows 安装并添加到系统环境就可以用 cat 命令了
https://git-scm.com/
要想开箱即用的话,我建议下载个 cmder,它集成了 git,可以达到解压即用。请下载那个集成了的完全版,不要下那个 mini 版
二位大佬完美解决问题,因为你们一个提供cmder,一个提供指令,小弟不知该给谁 “解决方式”