[英]How to export a txt file into csv with python?
我有這樣格式的txt文件:
Monday, Jul 24
8:45 apple 1
school
ball
dog
8:50 poirot 2
rouge
chien
chat
8:55 football 3
asroma
juventus
inter
如何忽略第一行(星期一,7月24日)並將這些值放入csv,並在每行中插入實際日期? 我需要這種格式:
A1 Monday, Jul 24
B1:8:45 apple 1 B2:school B3:ball B4:dog B5:ACTUALLY DATE
C1:8:50 poirot 2 C2:rouge C3:chien C4:chat C5:ACTUALLY DATE
etcetc..
所以我想以這種格式放置它們。 這是我的實際代碼:
import urllib2
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
from bs4 import BeautifulSoup
import sys
import re
#def to_2d(l,n):
# return [l[i:i+n] for i in range(0, len(l), n)]
with open('air.txt', 'r') as f:
x = f.read()
print x
req_text = x.split('Test')[1: -1]
data = []
for text in req_text:
text = text.split('\n', 1)[1]
for line in text.strip().splitlines():
data.append([line])
#maindatatable = to_2d(data, 4)
with open('output.csv', "wb") as f:
output = csv.writer(f, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')
output.writerows(data)
f.close()
我嘗試了to_2d(l,n),但是它不起作用,我知道如何在實際日期中達到這種格式? [Python 2.7]
更新的代碼,仍然無法正常工作:
import urllib2 import unicodecsv as csv import os import sys import io import time import datetime import pandas as pd from bs4 import BeautifulSoup import sys import re def to_2d(l,n): return [l[i:i+n] for i in range(0, len(l), n)] with open('air.txt', 'r') as f: x = f.read() print x req_text = x.split('Load')[1: -1] data = [] for text in req_text: text = text.split('\\n', 1)[1] for line in text.strip().splitlines(): data.append([line]) #maindatatable = to_2d(data, 4) from string import ascii_uppercase as LETTERS with open('air.txt') as f, open('output.csv', 'wb') as g: actual_date = f.readline().strip() while True: first_line = f.readline().strip() if not first_line: break second_line = f.readline().strip() third_line = f.readline().strip() fourth_line = f.readline().strip() the_time, noun, number = first_line.split(' ') number = int(number) letter = LETTERS[number] new_line = '%s1:%s %s %s %s2:%s %s3:%s %s4:%s %s5:%s' % (letter, the_time, noun, number, letter, second_line, letter, third_line, letter, fourth_line, letter, actual_date) print (new_line) f.close()
該腳本僅打印輸出行,而不是將它們寫入輸出csv文件。 但是,這對您來說很容易修改。 還要注意(a)用這種方式最多可以寫25行,因為從'B'到'Z'只有25個字母; (b)如果您的示例輸出文件中的第一行要寫入到csv文件中,那么這將不是對熊貓的有效輸入。
該腳本通過讀取第一行並將其內容actual_date
為actual_date
以便在輸出行中使用來工作。 然后,它一次讀取四行,以用於創建單個輸出行。
>>> from string import ascii_uppercase as LETTERS
>>> with open('air.txt') as f, open('output.csv', 'wb') as g:
... actual_date = f.readline().strip()
... while True:
... first_line = f.readline().strip()
... if not first_line:
... break
... second_line = f.readline().strip()
... third_line = f.readline().strip()
... fourth_line = f.readline().strip()
... try:
... the_time, noun, number = first_line.split(' ')
... except:
... print ('invalid input: ', first_line)
... quit(2)
... number = int(number)
... letter = LETTERS[number]
... new_line = '%s1:%s %s %s %s2:%s %s3:%s %s4:%s %s5:%s' % (letter, the_time, noun, number, letter, second_line, letter, third_line, letter, fourth_line, letter, actual_date)
... print (new_line)
...
B1:8:45 apple 1 B2:school B3:ball B4:dog B5:Monday, Jul 24
C1:8:50 poirot 2 C2:rouge C3:chien C4:chat C5:Monday, Jul 24
D1:8:55 football 3 D2:asroma D3:juventus D4:inter D5:Monday, Jul 24
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.