Python 如何将txt文件转换为CSV?

Python 如何将txt文件转换为CSV?,python,csv,Python,Csv,我有一个文本文件,有“5个值”。我有以下资料 [LENGTH, START INDEX(1 instead of 0), TYPE] [4, 1, "TypeA"] [11, 5, "TypeB"] [5, 16, "Charles"] 假设必须为每行文本处理这些指令,那么在python中逐行处理以从输入文件生成CSV的最有效方法是什么(请注意,空格和字符对于行的任何变化都不重要。相同的指令适用) i、 e.如果这是文件中的一行: ABCD EFGHIJK LMNOP QR 根据上述说明,该

我有一个文本文件,有“5个值”。我有以下资料

[LENGTH, START INDEX(1 instead of 0), TYPE]
[4, 1, "TypeA"]
[11, 5, "TypeB"]
[5, 16, "Charles"]
假设必须为每行文本处理这些指令,那么在python中逐行处理以从输入文件生成CSV的最有效方法是什么(请注意,空格和字符对于行的任何变化都不重要。相同的指令适用)

i、 e.如果这是文件中的一行:

ABCD EFGHIJK LMNOP QR
根据上述说明,该处理行的“csv版本”结果为:

"ABCD ", "EFGHIJK LMN", "OP QR"
如果没有尾随空格,则为:

"ABCD ", "EFGHIJK LMN", "OP QR"
“ABCD”、“EFGHIJK LMN”、“OP QR”


获取列表后,只需在其所有元素上使用
strip

data = [s.strip() for s in line]
演示:


正如我在评论中提到的,我看不出您的规格如何匹配您想要的输出——它们似乎不一致。因此,为了回答这个问题,我将更改您的
TypeA
“指令”,使其与其他指令一致

不过,您可以使用字符串切片和
csv
模块将固定宽度格式的文件转换为
csv
。比如说

import csv

specs = [[5, 0, "TypeA"],
         [11, 5, "TypeB"],
         [5, 16, "Charles"]]

with open("filename.txt") as infile, open("out.csv", "wb") as outfile:
    writer = csv.writer(outfile, quoting=csv.QUOTE_ALL)
    names = [s[-1] for s in specs]
    writer.writerow(names)
    for line in infile:
        row = [line[start:start+length] for length, start, name in specs]
        writer.writerow(row)
会产生

dsm@notebook:~/coding$ cat out.csv 
"TypeA","TypeB","Charles"
"ABCD ","EFGHIJK LMN","OP QR"

如果您要对表格数据进行大量处理,那么我建议您查看该库,这会使操作更简单:

import pandas as pd, csv
df = pd.read_fwf("filename.txt", widths=(5,11,5), names=["TypeA", "TypeB", "Charles"])
df.to_csv("out.csv", index=False, quoting=csv.QUOTE_ALL)

你能解释一下你所说的“说明”是什么意思吗?我看不出你的规格和你的输出是如何匹配的。你说开始是1索引的,但是你需要从0索引的5开始才能得到
EFG..
,你需要从0索引的16开始才能得到
OP QR
。你是不是像“read_fwf”一样的等价函数,但是像文本数组一样从输入结构中读取?我不知道文本数组是什么。你是说一个字符串,还是一系列字符串?是的,就像一系列字符串。这样我就可以在structure中的代码中拥有一个版本的“txt”文件(比如字符串列表或表示它的python结构),而不必传递文本文件的名称。因此,它就像pd.read_fwf(myStringListOrStructure,…)一样,您可以使用
StringIO
模块,它允许您创建一个对象,该对象接受一个字符串,然后假装它是一个文件<代码>从StringIO导入StringIO然后
pd.read_-fwf(StringIO(''.join(一些字符串的列表)),宽度=(5,11,5),名称=[“TypeA”,“TypeB”,“Charles”])
应该可以工作。所以一些字符串的列表类似于一些字符串的列表=['-第一行-','-第二行-,…]等等?