在文本文件中,有一个字符串"我不喜欢这个".
但是,当我把它读成字符串时,它变成了"我不喜欢这样".我明白\ u2018是"'"的unicode表示.我用
f1 = open (file1, "r")
text = f1.read()
Run Code Online (Sandbox Code Playgroud)
命令做阅读.
现在,是否有可能以这样的方式读取字符串:当它被读入字符串时,它是"我不喜欢这个",而不是像这样的"我不喜欢这样"?
第二次编辑:我看到有些人使用映射来解决这个问题,但实际上,是否没有内置转换可以将这种ANSI转换为unicode(反之亦然)转换?
我有html文件称test.html它有一个字?????.
我打开test.html并使用以下代码块打印它的内容:
file = open("test.html", "r")
print file.read()
Run Code Online (Sandbox Code Playgroud)
但它打印??????,为什么会发生这种情况,我该如何解决?
BTW.当我打开文本文件时它很好用.
编辑:我试过这个:
>>> import codecs
>>> f = codecs.open("test.html",'r')
>>> print f.read()
?????
Run Code Online (Sandbox Code Playgroud) 我正在从一个包含法语和英文字母的文件中读取数据.我试图构建一个包含所有可能的英文和法文字母的列表(存储为字符串).我使用下面的代码执行此操作:
# encoding: utf-8
def trackLetter(letters, line):
for a in line:
found = False;
for b in letters:
if b==a:
found = True
if not found:
letters += a
cur_letters = []; # for storing possible letters
data = urllib2.urlopen('https://duolinguist.wordpress.com/2015/01/06/top-5000-words-in-french-wordlist/', 'utf-8')
for line in data:
trackLetter(cur_letters, line)
# works if I print here
print cur_letters
Run Code Online (Sandbox Code Playgroud)
此代码打印以下内容:
['t','h','e','o','f','a','n','d','i','r','s','b',' y','w','u','m','l','v','c','p','g','k','x','j','z' ,'q','\ xc3','\ xa0','\ xaa','\ xb9','\ xa9','\ xa8','\ xb4','\ xae',' - ','\xe2','\ x80','\ x99','\ xa2','\ xa7','\ xbb','\ xaf']
尽管我指定了UTF编码,但显然法语字母在某种转换为ASCII时丢失了!奇怪的是当我直接打印出这一行(显示为评论)时,法语字符看起来很完美!
我该怎么做才能保留这些字符(é, è, ê, …
我正在尝试使用networkx创建图,到目前为止,我已经从以下文本文件创建了节点:文件1(user_id.txt)样本数据:
user_000001
user_000002
user_000003
user_000004
user_000005
user_000006
user_000007
Run Code Online (Sandbox Code Playgroud)
文件2(user_country.txt)样本数据:如果用户未输入其国家/地区详细信息,也将包含少量空白行
Japan
Peru
United States
Bulgaria
Russian Federation
United States
Run Code Online (Sandbox Code Playgroud)
文件3(user_agegroup.txt)数据:包含四个年龄段
[12-18],[19-25],[26-32],[33-39]
Run Code Online (Sandbox Code Playgroud)
我还有另外两个文件,其中包含以下示例数据,用于在图形中添加边
文件4(id,agegroup.txt)
user_000001,[19-25]
user_000002,[19-25]
user_000003,[33-39]
user_000004,[19-25]
user_000005,[19-25]
user_000006,[19-25]
user_000007,[26-32]
Run Code Online (Sandbox Code Playgroud)
文件5(id,country.txt)
(user_000001,Japan)
(user_000002,Peru)
(user_000003,United States)
(user_000004,)
(user_000005,Bulgaria)
(user_000006,Russian Federation)
(user_000007,United States)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经编写了以下代码来绘制仅包含节点的图形:(请检查代码,因为print g.number_of_nodes()
尽管print g.nodes()显示了正确的节点数,但从不打印正确的节点数。)
import csv
import networkx as nx
import matplotlib.pyplot as plt
g=nx.Graph()
#extract and add AGE_GROUP nodes in graph
f1 = csv.reader(open("user_agegroup.txt","rb"))
for row in f1:
g.add_nodes_from(row)
nx.draw_circular(g,node_color='blue')
#extract and add COUNTRY nodes in …Run Code Online (Sandbox Code Playgroud) 我正在浏览目录,并希望将所有文件名写入文件.这是一段代码
with open("c:/Users/me/filename.txt", "a") as d:
for dir, subdirs, files in os.walk("c:/temp"):
for f in files:
fname = os.path.join(dir, f)
print fname
d.write(fname + "\n")
d.close()
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,有些文件以中文字符命名.通过使用print,我可以在控制台中正确地看到文件名,但在目标文件中,它只是一团糟...我试图打开文件open(u"c:/Users/me/filename.txt", "a"),但它没有用.我也试着写fname.decode("utf-16"),还是不行......
我有一个普通的ASCII文件.当我尝试打开它时codecs.open(..., "utf-8"),我无法读取单个字符.ASCII是UTF-8的子集,为什么不能codecs以UTF-8模式打开这样的文件?
# test.py
import codecs
f = codecs.open("test.py", "r", "utf-8")
# ASCII is supposed to be a subset of UTF-8:
# http://www.fileformat.info/info/unicode/utf8.htm
assert len(f.read(1)) == 1 # OK
f.readline()
c = f.read(1)
print len(c)
print "'%s'" % c
assert len(c) == 1 # fails
# max% p test.py
# 63
# '
# import codecs
#
# f = codecs.open("test.py", "r", "utf-8")
#
# # ASC'
# Traceback (most recent call last):
# File "test.py", …Run Code Online (Sandbox Code Playgroud) 我一直在解析一些带有特殊字符(捷克语字母)的docx文件(UTF-8编码的XML).当我尝试输出到stdout时,一切顺利,但我无法将数据输出到文件,
回溯(最近一次调用最后一次):
文件"./test.py",第360行,
inile.write(u'\ t\t\t\t\t\t \n \n')
UnicodeEncodeError:'ascii'编解码器不能编码位置37的字符u'\ xed':序数不在范围内(128)
虽然我明确地将word变量转换为unicode类型(type(word)返回unicode),但我试图对它进行编码,.encode('utf-8)我仍然坚持这个错误.
以下是现在看到的代码示例:
for word in word_list:
word = unicode(word)
#...
ofile.write(u'\t\t\t\t\t<feat att="writtenForm" val="'+word+u'"/>\n')
#...
Run Code Online (Sandbox Code Playgroud)
我也尝试过以下方法:
for word in word_list:
word = word.encode('utf-8')
#...
ofile.write(u'\t\t\t\t\t<feat att="writtenForm" val="'+word+u'"/>\n')
#...
Run Code Online (Sandbox Code Playgroud)
即使是这两者的组合:
word = unicode(word)
word = word.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)
我有点绝望,所以我甚至试图编码里面的单词变量 ofile.write()
ofile.write(u'\t\t\t\t\t<feat att="writtenForm" val="'+word.encode('utf-8')+u'"/>\n')
Run Code Online (Sandbox Code Playgroud)
我很欣赏任何我做错的提示.
我试图打开并读取包含大量文本的.txt文件.下面是我的代码,我不知道如何解决这个问题.任何帮助将非常感激.
file = input("Please enter a .txt file: ")
myfile = open(file)
x = myfile.readlines()
print (x)
Run Code Online (Sandbox Code Playgroud)
当我输入.txt文件时,这是完整的错误消息显示如下:
line 10, in <module> x = myfile.readlines()
line 26, in decode return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 318: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud) 我在使用需要打开不同编码的文件的Python脚本时遇到了一些问题.
我通常使用这个:
with open(path_to_file, 'r') as f:
first_line = f.readline()
Run Code Online (Sandbox Code Playgroud)
当文件正确编码时,这很有用.
但有时,它不起作用,例如使用此文件,我有这个:
In [22]: with codecs.open(filename, 'r') as f:
...: a = f.readline()
...: print(a)
...: print(repr(a))
...:
??Test for StackOverlow
'\xff\xfeT\x00e\x00s\x00t\x00 \x00f\x00o\x00r\x00 \x00S\x00t\x00a\x00c\x00k\x00O\x00v\x00e\x00r\x00l\x00o\x00w\x00\r\x00\n'
Run Code Online (Sandbox Code Playgroud)
我想在这些方面搜索一些东西.可悲的是,用这种方法,我不能:
In [24]: "Test" in a
Out[24]: False
Run Code Online (Sandbox Code Playgroud)
我在这里发现了很多问题,指的是同一类型的问题:
但无法设法正确解码文件...
使用codecs.open():
In [17]: with codecs.open(filename, 'r', "utf-8") as f:
a = f.readline()
print(a)
....:
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-17-0e72208eaac2> in <module>()
1 with codecs.open(filename, 'r', "utf-8") …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 PyYAML 读取 yml 配置文件。请参阅下面此类文件的示例。所需字段可能包含特殊字符,例如\xc2\xb0。下面示例中的结果字符串不是所需的\xc2\xb0C,而是\xc3\x82\xc2\xb0C.
目标只是阅读\xc2\xb0C。我可以控制配置文件,因此转义或引用不是问题。之后也可以进行解码、替换或其他操作,但它们也应该适用于没有特殊字符的字符串和具有其他特殊字符的字符串。
然而到目前为止,我在这条路上还没有取得成功。
\n\n测试.yml
\n\nsuper_important_variable: \xc2\xb0C\nRun Code Online (Sandbox Code Playgroud)\n\n代码
\n\nimport yaml\nwith open(\'test.yml\', \'r\') as open_yml:\n print(yaml.safe_load(open_yml))\nRun Code Online (Sandbox Code Playgroud)\n\n当前结果
\n\n{\'super_important_variable\': \'\xc3\x82\xc2\xb0C\'}\nRun Code Online (Sandbox Code Playgroud)\n\n期望的结果
\n\n{\'super_important_variable\': \'\xc2\xb0C\'}\nRun Code Online (Sandbox Code Playgroud)\n\n奇怪的是,这会返回正确的结果:
\n\nimport yaml\nyml_str = "super_important_variable: \xc2\xb0C"\nyaml.safe_load(yml_str)\n\n> {\'super_important_variable\': \'\xc2\xb0C\'}\nRun Code Online (Sandbox Code Playgroud)\n 我正在阅读包含单个单词的文本文件B\xc3\xa9zier.
我希望将其转换为等效的解码utf-8格式,Bézier然后将其打印到控制台.
我的代码如下:
foo=open("test.txt")
for line in foo.readlines():
for word in line.split():
print(word.decode('utf-8'))
foo.close()
Run Code Online (Sandbox Code Playgroud)
输出是:
B\xc3\xa9zier
Run Code Online (Sandbox Code Playgroud)
但是,如果我做这样的事情:
>>> print('B\xc3\xa9zier'.decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
我得到了正确的输出:
Bézier
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么会这样?
我正在运行Ubuntu 10.04 LTS,Python 2.6.5(r265:79063,2010年4月16日,13:09:56)
>>> m = 'Šiven'
>>> m
'\xa6iven'
>>> unicode(m)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa6 in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我应该如何正确设置它(编码,解码),以便它准确地写出它读取的内容?