繁体   English   中英

使用列将文本文件转换为 CSV

[英]Converting Text file to CSV with Columns

我正在尝试将文本文件转换为 CSV 以简化其他应用程序的工作流程。 我遇到的问题是提供的文本文件在文件中有过多的空间,并在使用 pandas 导出到 CSV 时读入一列。我尝试将列名指定为参数,但它不起作用.

文本文件是这样读的,

85350   5211 APPLE LN               O                                                                                                                                                                     
85805   201 ORANGE ST               I                                                                                                                                                                     
84412   1313 BANANA RD              I 

它像这样导出到 CSV,

85350 5211 APPLE LN O,
85805 201 ORANGE ST I,
84412 1313 BANANA RD I

我希望导出的 CSV 具有列并且看起来与此类似,列是 Number Address In_Out,

Number,Address,In_Out
85350,5211 APPLE LN,O
85805,201 ORANGE ST,I
84412,1313 BANANA RD,I

pandas有一个读取固定宽度文本文件的方法。 如果推断列的默认值不正确,还有其他参数可以指示列的宽度,但在这种情况下它可以工作:

import pandas as pd

df = pd.read_fwf('input.txt', header=None)
df.to_csv('output.csv', index=False, header=['Number','Address','In_Out'])

output.csv:

Number,Address,In_Out
85350,5211 APPLE LN,O
85805,201 ORANGE ST,I
84412,1313 BANANA RD,I

问题是您的文件有空格,但地址也有空格。 但是第一列和最后一列没有,所以你可能可以这样做:

import sys
for line in sys.stdin:
    line = line.strip()
    left, right = line.split( ' ', 1 )
    mid, right = right.rsplit( ' ', 1 )
    print( ",".join( [left,mid,right] ) )

这会给你这个:

$ python test.py < data.file
85350,  5211 APPLE LN              ,O
85805,  201 ORANGE ST              ,I
84412,  1313 BANANA RD             ,I

但是,您也可以尝试 pandas read_fwf,因为您的文件看起来像固定宽度。

>>> a = pandas.read_fwf( 'data.file', widths=[8,28,1], names=('Zip','Address','Status') )
>>> a
     Zip         Address Status
0  85350   5211 APPLE LN      O
1  85805   201 ORANGE ST      I
2  84412  1313 BANANA RD      I
rows=[]
#Open csv module create the file to write it to etc etc etc
with open('file.txt') as f:
          row=[]
          for line in f.readlines():#gets each and every line from the file
      
               words=line.split()#splitting each word at space
               row=[words[0],f"{words[1]} {words[2]} {words[3]}",words[4]]
               rows.append(row)#appending to the rows list
csv.writerows(rows)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM