5

Я экспериментирую со странным поведением, которое не знаю, как решить. Я объясню сценарий:

  • Из скрипта Python я получаю 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()

2 ответа2

6

Стандарт /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()
3

Самое простое решение - добавить новую строку в команду записи:

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() записывает именно то, что вы ей даете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .