1

ファイルからすべての (スペース以外の) 空白文字を削除し、すべてのスペースをコンマに置き換えようとしています。これが私の現在のコードです:

def file_get_contents(filename):
  with open(filename) as f:
    return f.read()

content = file_get_contents('file.txt')
content = content.split
content = str(content).replace(' ',',')
with open ('file.txt', 'w') as f:
  f.write(content)

これを実行すると、ファイルの内容が次のように置き換えられます。

<built-in,method,split,of,str,object,at,0x100894200>
4

3 に答える 3

4

あなたが抱えている主な問題は、メソッドcontent.splitを呼び出してその戻り値を割り当てるのではなく、メソッドをコンテンツに割り当てていることです。contentその割り当ての後に印刷すると、次のようになります。<built-in method split of str object at 0x100894200>これはあなたが望むものではありません。メソッドへの単なる参照ではなく、メソッドの呼び出しにするために、括弧を追加して修正します。

content = content.split()

それを修正した後も、まだ問題がある可能性があると思います。str.splitリストを返します。これを使用して文字列に戻しますstr(スペースの代わりにコンマを使用する前に)。これにより、おそらく不要な角括弧と引用符が得られ、余分なコンマが大量に発生します。代わりに、次のstr.joinような方法を使用することをお勧めします。

content = ",".join(content) # joins all members of the list with commas

これがあなたが望むものかどうかは正確にはわかりません。を使用するsplitと、ファイル内のすべての改行が置き換えられるため、非常に多くの単語がコンマで区切られた 1 行になります。

于 2012-10-31T02:52:09.157 に答える
0

文字を置き換える場合は、正規表現にpythonのreモジュールを使用する方がよいと思います。サンプルコードは次のようになります。

import re

def file_get_contents(filename):
  with open(filename) as f:
    return f.read()

if __name__=='__main__':
    content = file_get_contents('file.txt')
    # First replace any spaces with commas, then remove any other whitespace
    new_content = re.sub('\s', '', re.sub(' ', ',', content))
    with open ('new_file.txt', 'w') as f:
      f.write(new_content)

常に分割しようとするよりも簡潔で、もう少し柔軟性があります。また、コードで開いて読み取るファイルのサイズにも注意してください。すべてのファイルの内容を一度に読み取るのではなく、行イテレータなどの使用を検討することをお勧めします。

于 2012-10-31T03:49:54.463 に答える
0

コンテンツを分割するときに、関数を呼び出すのを忘れました。また、分割すると配列になるため、ループして置換する必要があります。

def file_get_contents(filename):
  with open(filename) as f:
    return f.read()

content = file_get_contents('file.txt')
content = content.split() <- HERE
content = [c.replace(' ',',') for c in content]
content = "".join(content)
with open ('file.txt', 'w') as f:
  f.write(content)
于 2012-10-31T02:51:56.737 に答える