-1

これは私がこれまでに持っているものです:

import csv
import operator

with open('Links.csv', 'rb') as input_file, \
open('Link Statements.csv', 'w') as output_file:

reader = csv.reader(input_file, delimiter=',', quoting=csv.QUOTE_NONE)

for row in reader:
    link_name, from_unit, to_unit, rate, type = row
    output_file.write(" %s," % (from_unit))
    output_file.write("Establish %s link %s at %s Kbps to %s.\n" % (type, link_name, rate, to_unit))
    output_file.write(" %s," % (to_unit))
    output_file.write("Terminate %s link %s at %s Kbps from %s.\n" % (type, link_name, rate, from_unit))

data = csv.reader(open('Link Statements.csv'),delimiter=',')
for unit, statement in reader:
print unit
sortedlist = sorted(data, key=operator.itemgetter(0), reverse=True)
sortedlist

次のような csv を作成しています。

  RCT-6,Establish LOS UHF MCR link MPP01 at 14336 Kbps to 1/6.
  1/6,Terminate LOS UHF MCR link MPP01 at 14336 Kbps from RCT-6.
  RCT-6,Establish SIPRNET link SIPRPP01 at 8192 Kbps to 1/6.
  1/6,Terminate SIPRNET link SIPRPP01 at 8192 Kbps from RCT-6.
  RCT-6,Establish NIPRNET link NIPRPP02 at 4096 Kbps to 2/6.
  2/6,Terminate NIPRNET link NIPRPP02 at 4096 Kbps from RCT-6.
  RCT-6,Establish BSPE link BSPEPP03 at 472 Kbps to 1/10.
  1/10,Terminate BSPE link BSPEPP03 at 472 Kbps from RCT-6.
  1/10,Establish DPV0 link DPV0PP04 at 472 Kbps to 2/6.
  2/6,Terminate DPV0 link DPV0PP04 at 472 Kbps from 1/10.
  1/6,Establish SIPRNET link SIPRPP04 at 8192 Kbps to 1/3.
  1/3,Terminate SIPRNET link SIPRPP04 at 8192 Kbps from 1/6.
  1/6,Establish NIPRNET link NIPRPP03 at 8192 Kbps to 1/10.
  1/10,Terminate NIPRNET link NIPRPP03 at 8192 Kbps from 1/6.
  3/6,Establish NIPRNET link SIPRPP03 at 4096 Kbps to 1/10.
  1/10,Terminate NIPRNET link SIPRPP03 at 4096 Kbps from 3/6.
  MEB,Establish NIPRNET link NIPRZP01 at 8192 Kbps to RCT-6.
  RCT-6,Terminate NIPRNET link NIPRZP01 at 8192 Kbps from MEB.
  MEB,Establish SIPRNET link SIPRZP01 at 4096 Kbps to RCT-6.
  RCT-6,Terminate SIPRNET link SIPRZP01 at 4096 Kbps from MEB.

CSV を最初の列で英数字順に並べ替えようとしていますが、sortedlist ステートメントが機能しません。

ありがとう。

4

1 に答える 1

1

最初の問題は次のとおりです。

for unit, statement in reader:
    print unit

readerLinks.csvここでファイル用に作成した元のリーダーです。あなたの質問にはインデントがないため、推測する必要がありますが、この後のコードはwithステートメントの外側にあると想定しています。もしそうなら、あなたはすでに閉じられたファイルを繰り返し処理しようとしており、例外が発生します.これはあなたが見ているものだと思います.

私の推測が間違っていて、これがまだwithステートメント内にある場合は、別の問題があります。Link Statements.csvまだ閉じられていないため、フラッシュされていないため、新しいハンドルを開くと、何も入っていないか、最初の 7-1/2 行だけか、それ以外か。その場合は、このコードをwith.

いずれにせよ、あなたはおそらくdataではなくを意味していたでしょうreader

--

しかし、それを修正すると、新しい問題が発生するだけです。Acsv.readerイテレータです— 一度しか反復できません。したがって、これはすべての行を出力し、sortedすべてを取得した後に残ったものを並べ替えます。つまり、空のリストが得られます。

本当にすべての値を出力して、すべての値を並べ替える必要がある場合は、次のようにそれらをリストに入れる必要があります。

data = list(csv.reader(open('Link Statements.csv'),delimiter=','))

Link Statements.csvここでファイルをリークしていることに注意してください。withコードの前半で行ったように、ステートメントを使用する方がはるかに優れています。


sortedlist最後に、最後に を参照する以外は何もしません。printおそらく、何もしないのではなく、それを使用して新しい CSV ファイルを生成するか、何か他のことをしたかったのでしょう。


ソース データを提供していただけませんでしたが、中間データをコピーして何かに貼り付け、Link Statements.csvコードの後半を実行できます。私がそうするなら、これを実行してください:

data = csv.reader(open('Link Statements.csv'),delimiter=',')
sortedlist = sorted(data, key=operator.itemgetter(0), reverse=True)
for item in sortedlist:
    print item

…私はこれを得る:

['  RCT-6', 'Establish LOS UHF MCR link MPP01 at 14336 Kbps to 1/6.']
['  RCT-6', 'Establish SIPRNET link SIPRPP01 at 8192 Kbps to 1/6.']
['  RCT-6', 'Establish NIPRNET link NIPRPP02 at 4096 Kbps to 2/6.']
['  RCT-6', 'Establish BSPE link BSPEPP03 at 472 Kbps to 1/10.']
['  RCT-6', 'Terminate NIPRNET link NIPRZP01 at 8192 Kbps from MEB.']
['  RCT-6', 'Terminate SIPRNET link SIPRZP01 at 4096 Kbps from MEB.']
['  MEB', 'Establish NIPRNET link NIPRZP01 at 8192 Kbps to RCT-6.']
['  MEB', 'Establish SIPRNET link SIPRZP01 at 4096 Kbps to RCT-6.']
['  3/6', 'Establish NIPRNET link SIPRPP03 at 4096 Kbps to 1/10.']
['  2/6', 'Terminate NIPRNET link NIPRPP02 at 4096 Kbps from RCT-6.']
['  2/6', 'Terminate DPV0 link DPV0PP04 at 472 Kbps from 1/10.']
['  1/6', 'Terminate LOS UHF MCR link MPP01 at 14336 Kbps from RCT-6.']
['  1/6', 'Terminate SIPRNET link SIPRPP01 at 8192 Kbps from RCT-6.']
['  1/6', 'Establish SIPRNET link SIPRPP04 at 8192 Kbps to 1/3.']
['  1/6', 'Establish NIPRNET link NIPRPP03 at 8192 Kbps to 1/10.']
['  1/3', 'Terminate SIPRNET link SIPRPP04 at 8192 Kbps from 1/6.']
['  1/10', 'Terminate BSPE link BSPEPP03 at 472 Kbps from RCT-6.']
['  1/10', 'Establish DPV0 link DPV0PP04 at 472 Kbps to 2/6.']
['  1/10', 'Terminate NIPRNET link NIPRPP03 at 8192 Kbps from 1/6.']
['  1/10', 'Terminate NIPRNET link SIPRPP03 at 4096 Kbps from 3/6.']

したがって、あなたのsorted行はまさにあなたが望んでいたものです。あなたが間違っているのはその周りのすべてです。

于 2013-10-02T00:13:35.113 に答える