2012-03-01 8 views
3

入力ファイルを指定してそのファイルから行を取り出し、それらを別々の宛先ファイルにコピーできるようにするスクリプトを作成しようとしています。これまでのところ、私は目標にかなり近づくことができましたが、私が取り組んでいる問題、そして私が(少なくとも私が理解できる)答えを見つけることができないようであることは、 「not」や「is」という言葉や他のスクリプティング用語が文字列の中にあります。「これは私が欲しいとは思っていません」というようなものを検索すると、オペレータは行動に移り、何もコピーしません。だから私の質問は、私がこのことが起こるのを止めるために何ができるのかと思います(私のスクリプトを一番下に追加しました。とにかく私はそれを求めます。上記のように、私は1000行の記事(個々の行は段落に似ていない)を持つtxtファイルを持っており、250行は「これはコピーしたい行です」と始まりますが、それぞれが個々の理由を言う理由は私がコピーしたいと思っている行は、その素晴らしい、原因は紫色などなど)それは私のスクリプトがちょうど最初の "これは私がコピーしたい部分です"を引っ張って、そこにそれを残すそれはすべての行から文字列の残りの部分をつかみますか?私は裁判かかわらず、いくつかの自己教育をしようと私が午前の問題と同じように混乱している私は、トラブルシューティングに全体で実行する用語の一部をエラーおりますのであるファイルから別のファイルに行をコピーする

は、これも

#This will let you search for a string in a file and transfer it to another file 
#It will search for texts or numbers 

print "This is a tool to search one file and transfer information to another." 
print 
#select source file 
a=open(raw_input("Enter full path of source file using using \\ instead of \: "), "r") 
#select destination file 
b=open(raw_input("Enter full path of destination file using \\ instead of \: "), "a")  
a 
b 
#actual copy command 
copy=raw_input("What are you searching for: ") 
for line in a.readlines(): 
    if copy in line: 
     b.write(copy + '\n') 
     yes='y' 
     for again in raw_input("Would you like to search for another line? y/n: "): 
      if again in yes:   
       copy=raw_input("What are you searching for: ") 
       if copy in line: 
        b.write(copy + '\n') 
    b.close 
    a.close 
+0

'in'演算子を悪用しようとしている場合、' == '演算子を使うべきです、' if again.lower()。startswith( 'y')のようなファジースタイル演算子を使うべきです: '。 –

+0

次回よりわかりやすいタイトルを使用してください。 – tr9sh

答えて

1
)=簡単なものになるかもしれませんが、

"これは私が欲しいとは思っていません"のようなものを検索すると、not演算子が実行され、何もコピーされません。

これは不可能です。実際には、私は試しただけで、そのようなことはありません。あなたが間違っていることが他にもあるはずです。

すべての行から残りの文字列を取得するには、

raw_inputinputを使用してから

b.write(line) 
0

b.write(copy + '\n') 

は、あなただけの切り替えでした置き換えますか?あなたが記述している問題(パス内のバックスラッシュを二重にする必要があると思うという事実)は、Python 2の下でinput()を使って端末から読み込むことによって発生します。 raw_inputにこのような問題はないはずです。

あなたの第二の問題は明確である:(@larsだけで指摘したように、lineすでに改行が含まれている)、b.write(copy + '\n')を行う

b.write(line) 

はしないでください

おそらく
+0

'line'はすでに改行が追加されています。 –

+0

'' \\ please "と' r "の違いをチェックしてください。\\ please" " – alexis

+0

助けてくれてありがとう!私はちょうど私がこの物を通して自分の道をつまずいていると言ったように、私はちょうど単一 '\'と2x '\'で入力を使ってみました、そして無効な構文を教えてくれました。構文私はファイルを開くことができる唯一の方法は、生の入力と二重スラッシュで、なぜ= – user1242747

0

以上になるPythonのreモジュールを使用してここで役に立つ。

#All your existing code to retrieve input and output file names, etc. 
#Convert the user's search string into a raw string 
copy = eval("r'%s'" % (raw_input("What are you searching for?: "),)) 

import re 

searchRegEx = re.compile(copy) 

for line in a: 
    matched = searchRegEx.search(line) 

if matched != None: 
    b.write(line) 

第二に、代わりに全体をラップする方が賢明かもしれません、ユーザは(あなたがすでに1を探している間に)別の行を検索したいかどうかを尋ねるネストされたループを持つの「ゲット検索例:文字列入力と検索ロジックを実行する "を繰り返し、関数を呼び出すときにユーザーが 'y'を入力する限りTrueを設定するブール値を使用してTrueを設定します)。

乾杯!