0

私のコードはあまり良くありませんが、これは非常に興味深い問題です。文字列内のスラッシュを検索すると、スラッシュがファイルの最後の単語にある場合を除いて、すべてが見つかります。これが私のコードです。

#!/usr/bin/python
import sys
if len(sys.argv)!=2:
    print "usage: %s filename\n" % (sys.argv[0]);
    exit(0);
f = open(sys.argv[1]);
lines = [i for i in f.readlines()]
finals = [];
for line in lines:
    words = line.split(",");
    for word in words:
            if word.find("/") != -1:
                    datefixes = word.split("/")
                    if datefixes[2].__len__() == 4:
                            temp = datefixes[2]
                            word = datefixes[0] + "-" + datefixes[1] + "-" + temp[-2:]
            finals += "," + word;
tempstring = ''.join(finals)
finallist = tempstring.split("\r\n")
finalstring = ""
for tmpstrpart in finallist:
    if tmpstrpart != "" or tmpstrpart !="\r\n":
            finalstring += tmpstrpart[1:] + "\r\n"
print finalstring

ここにサンプル入力があります

ACPVBF,1930-729,Z729,12/16/2014,6/10/2008,1/5/2003,44-48-46,39-43-41,35-39-37,29-33-31
ACPVGT,1930-729,Z729,25-29-27,19-23-21,14-18-16,7/11/2009,2/6/2004,48-2-0,42-46-44
ACPUQH,1930-729,Z729,32-40-19,26-34-13,21-29-8,14-22-1,9/17/1946,5/13/1942,49-7-36
ACPVOU,1930-729,Z729,42-0-29,36-44-23,31-39-18,24-32-11,19-27-6,15-23-2,9/17/1946

コードでは、これらの行はカンマで区切られています。最後の単語に / が含まれている場合、スラッシュは見つかりません。ただし、それが最後にある場合に限ります。残りは正常に動作します。

編集:これらの行で現在取得している出力は次のとおりです。

ACPVBF,1930-729,Z729,12-16-14,6-10-08,1-5-03,44-48-46,39-43-41,35-39-37,29-33-31
ACPVGT,1930-729,Z729,25-29-27,19-23-21,14-18-16,7-11-09,2-6-04,48-2-0,42-46-44
ACPUQH,1930-729,Z729,32-40-19,26-34-13,21-29-8,14-22-1,9-17-46,5-13-42,49-7-36
ACPVOU,1930-729,Z729,42-0-29,36-44-23,31-39-18,24-32-11,19-27-6,15-23-2,9/17/1946 

これらの行から取得しようとしている出力は次のとおりです。

ACPVBF,1930-729,Z729,12-16-14,6-10-08,1-5-03,44-48-46,39-43-41,35-39-37,29-33-31
ACPVGT,1930-729,Z729,25-29-27,19-23-21,14-18-16,7-11-09,2-6-04,48-2-0,42-46-44
ACPUQH,1930-729,Z729,32-40-19,26-34-13,21-29-8,14-22-1,9-17-46,5-13-42,49-7-36
ACPVOU,1930-729,Z729,42-0-29,36-44-23,31-39-18,24-32-11,19-27-6,15-23-2,[9-17-46]

括弧で囲まれたものも変更してほしい。

BrenBarn の回答に基づく最終的な作業コード:

#!/usr/bin/python
import sys
import re
if len(sys.argv)!=2:
    print "usage: %s filename\n" % (sys.argv[0]);
    exit(0);
f = open(sys.argv[1]);
x = f.read()
f.close()
filename = sys.argv[1]
filename = filename[:-4] + " finished.csv"
f = open(filename, 'w')
f.write(re.sub(r'(\d{1,2})/(\d{1,2})/\d{2}(\d{2})', r'\1-\2-\3', x))
f.close()

すべての助けをありがとう。申し訳ありませんが、まだ賛成できません。

4

2 に答える 2

0

問題が何であるかはわかりませんが、正規表現を使用するだけで、あなたがやろうとしていることをはるかに簡単に達成できると思います。

>>> print x
ACPVBF,1930-729,Z729,12/16/2014,6/10/2008,1/5/2003,44-48-46,39-43-41,35-39-37,29-33-31
ACPVGT,1930-729,Z729,25-29-27,19-23-21,14-18-16,7/11/2009,2/6/2004,48-2-0,42-46-44
ACPUQH,1930-729,Z729,32-40-19,26-34-13,21-29-8,14-22-1,9/17/1946,5/13/1942,49-7-36
ACPVOU,1930-729,Z729,42-0-29,36-44-23,31-39-18,24-32-11,19-27-6,15-23-2,9/17/1946
>>> print re.sub(r'(\d{1,2})/(\d{1,2})/\d{2}(\d{2})', r'\1-\2-\3', x)
ACPVBF,1930-729,Z729,12-16-14,6-10-08,1-5-03,44-48-46,39-43-41,35-39-37,29-33-31
ACPVGT,1930-729,Z729,25-29-27,19-23-21,14-18-16,7-11-09,2-6-04,48-2-0,42-46-44
ACPUQH,1930-729,Z729,32-40-19,26-34-13,21-29-8,14-22-1,9-17-46,5-13-42,49-7-36
ACPVOU,1930-729,Z729,42-0-29,36-44-23,31-39-18,24-32-11,19-27-6,15-23-2,9-17-46
于 2012-09-12T05:00:42.440 に答える
0

あなたのコードの問題は、末尾の改行だと思います。私の推測では、各行の最後の単語で失敗するでしょう。分割する前に line.strip() を実行することをお勧めします

于 2012-09-12T05:11:28.260 に答える