web-dev-qa-db-ja.com

「file」コマンドは、vimで最初にファイルを編集しない限り、「行末記号のないASCIIテキスト」を生成します。

解決方法がわからない奇妙な行動を実験しています。シナリオを説明します。

  • Pythonスクリプトから parse でホストされている単純なアプリケーションからjsonを取得しています。
  • テキストを取得したら、そこから文を取得し、ローカルの「txt」ファイルに保存して、iso-8859-15として保存します。
  • 最後に、ISO-8859-15で受信することを期待している音声処理装置にテキストを送信します

奇妙なことに、pythonスクリプトが実行されると、実行すると

file my_file.txt

出力は次のとおりです。

my_file.txt: ASCII text, with no line terminators

しかし、私が開くとmy_file.txt vimを使用して、文の最後の「ドット」を削除し、再度書き込み、ファイルを保存します。もう一度行う場合:

file my_file.txt

現在、出力は次のとおりです。

my_file.txt: ASCII text

これは、音声シンセサイザーを処理する際のいくつかの問題を解決します。では、vimを使わずに、この動作を自動的に強制するにはどうすればよいですか?また、iconvで何度も試行しましたが、成功しませんでした。

どんな助けでも大歓迎です

編集:

i@raspberrypi ~/main $ hexdump -C my_file.txt

00000000  73 61 6d 70 6c 65 20 61  6e 73 77 65 72 2e 2e     |sample answer..|
0000000f

pi@raspberrypi ~/main $ file my_file.txt
my_file.txt: ASCII text, with no line terminators
pi@raspberrypi ~/main $ vim my_file.txt
pi@raspberrypi ~/main $ file my_file.txt
my_file.txt: ASCII text
pi@raspberrypi ~/main $ hexdump -C my_file.txt

00000000  73 61 6d 70 6c 65 20 61  6e 73 77 65 72 2e 2e 0a  |sample answer...|
00000010

サンプルファイル

Pythonコード:

import json,httplib
from random import randint
import codecs

connection = httplib.HTTPSConnection('api.parse.com', 443)
connection.connect()
connection.request('GET', '/1/classes/XXXX', '', {
       "X-Parse-Application-Id": "xxxx",
       "X-Parse-REST-API-Key": "xxxx"
     })
result = json.loads(connection.getresponse().read())

pos = randint(0,len(result['results'])-1)
sentence = result['results'][pos]['sentence'].encode('iso-8859-15')
response = result['results'][pos]['response'].encode('iso-8859-15')

text_file = codecs.open("sentence.txt", "w","ISO-8859-15")
text_file.write("%s" % sentence)
text_file.close()

text_file = open("response.txt","w")
text_file.write("%s" % response)
text_file.close()
6
cor

標準 /bin/echoを使用して、その改行をファイルの最後に追加できます。

$ echo -n 'ssss'>test
$ file test
test: ASCII text, with no line terminators
$ hexdump -C test 
00000000  73 73 73 73                                       |ssss|
00000004
$ echo >> test
$ file test
test: ASCII text
$ hexdump -C test 
00000000  73 73 73 73 0a                                    |ssss.|
00000005
$ 

別のオプションは、それをPythonコードに追加することです:

text_file = open("response.txt","w")
text_file.write("%s" % response)
text_file.write("\n")  # <-- newline added here
text_file.close()
6
Scott Johnson

最も簡単な解決策は、writeコマンドに改行を追加することです。

_text_file.write("%s\n" % sentence)
_

デモンストレーションする私のサンプルプログラム

_import codecs
sentence = 'something'
text_file = codecs.open("sentence.txt", "w","ISO-8859-15")
text_file.write("%s" % sentence)
text_file.close()
text_file = codecs.open("sentence2.txt", "w","ISO-8859-15")
text_file.write("%s\n" % sentence)
text_file.close()
_

そして結果:

_$ file sentence.txt 
sentence.txt: ASCII text, with no line terminators
$ file sentence2.txt 
sentence2.txt: ASCII text
_

説明は、あなたが書いている変数には改行が含まれておらず、write()はあなたがそれを与えたのとまったく同じように書いているということです。

3
Bram