9

Python の複数行の文字列を 1 行に変換したい。Vim で文字列を開くと、各行の先頭に ^M が表示されます。文字列を処理して、各行の間にタブ区切りを付けてすべてを 1 行にするにはどうすればよいですか。Vim での例は次のようになります。

  Serialnumber
 ^MName           Rick
 ^MAddress           902, A.street, Elsewhere

次のようなものにしたいと思います:

Serialnumber \t Name \t Rick \t Address \t 902, A.street,......

各文字列は 1 行です。私は試した

   somestring.replace(r'\r','\t')

しかし、うまくいきません。また、文字列の最後に改行 (UNIX newline?) が必要な場合、文字列が 1 行になったらどうすればよいですか?

4

8 に答える 8

9

以前の回答が間違っていることに気づき、このソリューションをテストする必要があったため、以前の回答を削除しました。

これをファイルから読み取っていると仮定すると、次のことができます。

f = open('test.txt', 'r')
lines = f.readlines()
mystr = '\t'.join([line.strip() for line in lines])

ep0 が言ったように、^M は '\r' を表し、これは Windows のキャリッジ リターン文字です。Windows の改行文字は \r\n であるため、各行の先頭に ^M があるのは驚くべきことです。行頭に ^M がある場合は、ファイルに \n\r が含まれていることを示します。

それにもかかわらず、上記のコードはリスト内包表記を使用して、 から読み取った各行をループしますtest.txt。のそれぞれについて、各行lineのENDS から空白と非印刷文字を削除するためlinesに を呼び出します。str.strip()最後に'\t'.join()、結果のリストを呼び出してタブを挿入します。

于 2013-08-01T23:52:55.527 に答える
5

「\r」文字を「\t」に置き換えることができます。

my_string.replace("\r", "\t")
于 2013-08-01T21:27:36.637 に答える
0

これは、Windows が新しい行を区切るために使用する CR (キャリッジ リターン) を VIM がどのように解釈するかに起因します。エディターは 1 つだけ使用する必要があります (個人的には VIM の方が好みです)。これを読んでください: VIM ^M

于 2013-08-01T21:24:21.037 に答える