将.txt文件内容分隔为.csv fi中的多个单元格

2024-09-27 01:18:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python2.7,我有这样一个txt文件,我用Python打开它:

TIME    FLIGHT  FROM    AIRLINE AIRCRAFT        STATUS
8:40 AM LH1334  
Frankfurt (FRA)
Lufthansa   A320 (D-AIPP)   
Landed 8:40 AM
8:45 AM OK786   
Prague (PRG)
Czech Airlines  AT45 (OK-KFP)   
Landed 8:32 AM

我想以正确的模式将其导出到csv中的6列(时间、航班、发件人、航空公司、飞机、状态),我想得到:

TIME            FLIGHT  FROM            AIRLINE         AIRCRAFT      STATUS
Jul 21 8:40 AM  LH1334  Frankfurt (FRA) Lufthansa   A320 (D-AIPP) Landed 8:40 AM
...

这对我来说有点难,因为一行有多个单词,所以我没有任何有用的想法,如何才能达到这个形式。你知道吗

我的代码:

import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd

def to_2d(l,n):
    return [l[i:i+n] for i in range(0, len(l), n)]

f = open('proba.txt', 'r')
x = f.read()

filename=r'output.csv'

resultcsv=open(filename,"wb")
output=csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')

maindatatable = to_2d(x, 6)
print maindatatable
output.writerows(x)

resultcsv.close()

Tags: csvfromimporttxtoutputtimestatusam
1条回答
网友
1楼 · 发布于 2024-09-27 01:18:50

看起来它们被分成了4行。你知道吗

我们可以处理第一行

8:40 AM LH1334

如下:

import re

matches = re.match('(\d{1,2}:\d{2} [APM]{2}) (\w+\d+)', line)
time = matches.group(1)
flight = matches.group(2)

编辑:这一位太过分了。它们之间有一个标签,所以实际上很简单:

time, flight = line.split('\t')

第二行:

Frankfurt (FRA)

是微不足道的:

from_ = line

第三行:

Lufthansa   A320 (D-AIPP)

可以处理:

airline, aircraft = line.split('\t')

第四行:

Landed 8:40 AM

也很琐碎:

status = line

总之,您可以按四行一批地处理它们:

from itertools import islice

with open('my.txt') as f:
    header = f.readline()  # skip header

    while True:
        # read four lines
        lines = list(islice(f, 4))
        if len(lines) < 4:
            break

        time, flight = lines[0].split('\t')
        from_ = lines[1]
        airline, aircraft = lines[2].split('\t')
        status = lines[3]

        # Output a row into your csv file here

相关问题 更多 >

    热门问题