我正在尝试阅读包含Instagram公开发布图片及其元数据的文本文件。每行都有一个完整的帖子及其所有元数据。图像帖子的某些部分是用阿拉伯语写的。当我使用Python读取文件时,但打印行后阿拉伯语文本没有显示。 阿拉伯文字显示为等等\ xd9 \ x8a \ xd8
这是我用来从.txt文件中读取的代码
test_file = codecs.open('instagram_info.txt', mode='r', encoding='utf-8')
print ("reading images URLs file")
counter = 0
for line in test_file:
print("Line: ", line.encode("utf-8"))
counter += 1
print(counter)
if counter == 50:
break
test_file.close()
这是文本文件
中的一个行示例100158441 25.256887893 51.507485363 Centerpoint 4f09c7a6e4b090ef234993e3 http://scontent.cdninstagram.com/hphotos-xpa1/outbound-distilleryimage9/t0.0-17/OBPTH/9ecde7ecac7811e3b87a12bcaa646ac5_8.jpg sarrah80 25.256887893 51.507485363 2014-03-15 19:37:45 1394912265 16144 ولا راضي يوقف يم الارنوب عشان اصوره dody_nasser said "هههه اكيد خايف الجبان " nassersahim said "@sarrah80 يبغي يملغ عليكم" sarrah80 said "@dody_nasser بطل ولدي بس خبرج المود ومايسوي" sarrah80 said "@nassersahim انت شفت الأرنب شلون يطالعه ذبحني من الضحك " arwa9009 said "حياتي" fatimaaljasssim said "حياتتتتتتتنتتي عليهم فديتهم" 6 non_al3yooon,mun.mun_almalki,__manoor__,monaalalii 46
此外,当前代码添加“b”作为每个读取行的前缀,不知道为什么会发生这种情况?
答案 0 :(得分:1)
codecs.open
。 open
将有效。.encode
是导致它变成这个的原因:\ xd9 \ x8a \ xd8。您可以删除该函数调用。 print("Line: ", line)
答案 1 :(得分:0)
问题不在于阅读文本。问题出在print()
上。您的控制台可能无法使用unicode文本。尝试将结果写入文件,并使用支持unicode的文本编辑器查看内部。
首先,按照NightShadeQueen的建议。然后尝试将行复制到另一个文件以检查:
#!python3
with open('instagram_info.txt', mode='r', encoding='utf-8') as fin, \
open('output.txt', 'w', encoding='utf-8') as fout:
for n, line in enumerate(fin, 1):
fout.write(line)
if n == 50:
break
了解自动关闭文件对象的with
构造。 enumerate()
会自动计算您的行数。使用此代码并将您的示例存储在UTF-8中的instagram_info.txt
中,您应该得到相同的output.txt
(前50行)。
然后尝试在同一案例中使用print()
的第二个示例。请注意end=''
中的print
- 它会自动添加换行符,因为换行符是line
的一部分。
#!python3
with open('instagram_info.txt', encoding='utf-8') as f:
for n, line in enumerate(f, 1):
print(line, end='')
if n == 50:
break
如果您使用的是Windows,请转到cmd
窗口并尝试使用
c:\...\>chcp 65001
再次运行Python脚本。控制台仍然可能无法显示所有字符(控制台相当笨)。在某些Python GUI窗口中显示文本可能更容易。
答案 2 :(得分:0)
不要对线路进行编码;直接打印Unicode文本:
#!/usr/bin/env python3
from itertools import islice
with open('instagram_info.txt', encoding='utf-8-sig') as file:
print("reading images URLs file")
for line in islice(file, 50): # read no more than 50 lines from the file
print("Line: ", line, end='')