“file”命令产生“ASCII 文本,没有行终止符”,除非我先在 vim 中编辑该文件

“file”命令产生“ASCII 文本,没有行终止符”,除非我先在 vim 中编辑该文件

我正在尝试一种奇怪的行为,我不知道如何解决。我将解释一下这种情况:

  • 我从 Python 脚本中获取托管在解析
  • 一旦我得到文本,我就会从中得到一个句子并将其保存到本地“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()

答案1

该标准/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()

答案2

最简单的解决方案是在写入命令中附加换行符:

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()写入的内容与您指定的完全一致。

相关内容