2016-07-12 9 views
1

複数のRESTエンドポイントからデータを取り込み、列ヘッダーをデータに追加しようとしていて、データの区切り文字をセミコロン(;)からカンマ(、)ので、Excelで正しくフォーマットできます。ファイルへの.csvデータの書き換えは、Pythonでアーティファクトのある最初の列を作成します

注:以下のコードのxはリンクURIのリストであり、省略記号はリンクの検出とプルに使用されるコードを置き換えます。

from bs4 import BeautifulSoup 
import openpyxl 
from html.parser import HTMLParser 
from urllib.request import urlopen 
from urllib import parse 
import logging 
import csv 
... 
... 
for link in links: 
    linkContent = urlopen(link) 
    htmlBytes = linkContent.read() 
    htmlString = htmlBytes.decode("utf-8") 
    targetFile = open(str(x[link]) + '.csv', 'w') 
    targetFile.write('Date;StartTime;EndTime;Environment;Domain;DeployID;Module;Status;BuildVersion;DeployType;DeployStart\n') 
    targetFile.write(htmlString) 
    targetFile.close() 

for file in x: 
    with open(str(x[file]) + '.csv', newline='') as csvFile: 
     reader = csv.reader(csvFile,delimiter=";") 
     data = [line for line in csvFile] 

    datalen= len(data) 
    for i in range(datalen): 
     data[i] = data[i].replace(";", ",") 
     data[i] = data[i].replace(" ","") 

    with open(str(x[file]) + '.csv', 'w') as csvFile: 
     w=csv.writer(csvFile,delimiter=',',quoting=csv.QUOTE_NONE,escapechar=' ') 
     w.writerows([data]) 

残念ながら、これは最初の行に続くすべての行の前に不要なカンマを生成します。理由はわかりません。これは、最初のために、ディスプレイにすべての空白をエクセルあり

21、...:

すなわち

日、のStartTime、終了時間...
、2016年7月12日、03:11、03行の後に行のデータの表示を開始します。基本的に、すべてのデータを1行右にシフトします。

コードには、正しく解析するための不要なパラメータや引数があります。

ありがとうございます。

+0

は、なぜあなたは '交換する;' 'と、'すでに区切り文字を変更するので? –

+0

'、'を '、'で区切られたファイルに挿入すると、列の整列の問題が発生することに注意してください。ファイルを開くために使用したエディタは、 '、'に列を作成します –

+0

ファイルは元々は ';'によって区切られていませんでした。私はこれを行って、ファイルをエラーなくExcelで開くことができます。 –

答えて

1

,をファイルに手動で追加すると、手動で挿入された,が、区切り文字としてcsv.writerによって挿入されたものと衝突するため、列の配置の問題が発生します。

区切り文字を;から,に変更すると、余分な文字は不要です(replace(";", ","))。 csv.readerおよびwriterオブジェクトの区切り文字を変更すれば十分です。

次はあなたが意図し何をすべき:

for file in x: 
    with open(str(x[file]) + '.csv', newline='') as csvFile: 
     reader = csv.reader(csvFile, delimiter=";") 
     data = [row for row in reader] 
     #      ^^^^^^ use reader not csvFile 

    with open(str(x[file]) + '.csv', 'w') as csvFile: 
     w=csv.writer(csvFile, delimiter=',', quoting=csv.QUOTE_NONE,escapechar=' ') 
     w.writerows(data) 
+0

これはコードを書くより効率的な方法です問題を解決しているようだ。私はまだ、最初の行の後のすべての行頭に '、'をつけています。 –

+0

@ Ryan.Patrickコードを更新しました。あなたは 'reader'の代わりに' csvFile'を使用していました –

+0

素晴らしいです、ありがとう –

関連する問題