2016-12-19 4 views
0

Python newb(2ヶ月)をここに募集します。私は、.txtファイルの各行の2つの特定の場所に情報を挿入するプログラムを作成しようとしています。実際には、プロセスで新しいファイルを作成しています。テキストファイルの各行の2つの特定の位置に書き込む(または、情報を追加して新しいファイルを作成する)

1,340.959,859.210,0.0010,VV53 
18abc,34099.9590,85989.2100,0.0010,VV53 
00y46646464,34.10,859487.2970,11.4210,RP27 

出力は次のようになります:異なる

1,7340.959,65859.210,0.0010,VV53 
18abc,734099.9590,6585989.2100,0.0010,VV53 
00y46646464,734.10,65859487.2970,11.4210,RP27 

各行に、数百行

ソースファイル内の情報は、このようなものです。私が探している特定のマーカーは、コンマ(、)の最初と2番目の出現です。 1番目と2番目のカンマの後に追加する必要があります。あなたがコードを見たらどういう意味か分かります。

これまでのところ、プログラムは正しい場所を見つけて必要なものを挿入しますが、新しいファイルには1行以上は書きません。私はデバッグを試み、何が「フードの下で」起こっているのを見て、すべてがそこに良いように見えました。

私はまだ1週間前にどこにいたのですか?

tl; drコードは、新しいファイルに1行だけ出力し、数百を必要とします。私が正しくあなたのサンプルとコードを理解していた場合

f = open('test.txt', 'r') 
new = open('new.txt', 'w') 

first = ['7'] 
second = ['65'] 
line = f.readline() 
templist = list(line) 
counter = 0 

while line != '': 
    for i, j in enumerate(templist): 
     if j == ',': 
      place = i + 1 
      templist1 = templist[:place] 
      templist2 = templist[place:] 
      counter += 1  
      if counter == 1: 
       for i, j in enumerate(templist2): 
        if j == ',': 
         place = i + 1 
         templist3 = templist2[:place] 
         templist4 = templist2[place:] 
         templist5 = templist1 + first + templist3 + second + templist4 
         templist6 = ''.join(templist5) 
         new.write(templist6) 
         counter += 1 
         break      
       if counter == 2: 
        break 
      break 

    line = f.readline() 
    templist = list(line) 

f.close() 
new.close() 
+0

あなたの入力し、あなたの期待出力を追加することはできますか?私はあなたのコード全体を与えるよりも正確だと思います。 –

+0

csvパーサーを実装しようとしていますか?単に 'csv'モジュールを使用してください。 –

答えて

0

、これは有効なアプローチであるかもしれない:

with open('test.txt', 'r') as infd, open('new.txt', 'w') as outfd: 
    for line in infd: 
     fields = line.split(',') 
     fields[1] = '7' + fields[1] 
     fields[2] = '65' + fields[2] 
     outfd.write('{}\n'.format(','.join(fields))) 
+0

「7」と「65」を追加するよりも多くの作業が必要だと思います。達成するためのいくつかの条件があります。 –

+1

@ nexus66「履行する条件」がどこにあるのかは分かりませんが、それは「理解していれば...」の全体のポイントです。サンプルの入力と出力は、第2フィールドに「7」、第3フィールドに「65」を前に置いているように見え、コードは同じ行為をしているようですが、連続する行を処理する際にいくつか問題があります... 'new.write(...)'が改行を追加しないので、かなり可能性があります。 – twalberg

+0

私は質問に答えました。あなたが持っている場合は見て、あなたのフィードバックを残してください。 –

関連する問題