import codecs # 创建一个变量并存储我们要搜索的文本 search_text = "F:" # 创建一个变量并存储我们要添加的文本 replace_text = "\pc-20190606" # 使用 open() 函数以只读模式打开我们的文本文件 with open(r'林查胶印ID号.txt', 'r', encoding='UTF-8') as file: # 使用 read() 函数读取文件内容并将它们存储在一个新变量中 data = file.read() # 使用 replace() 函数搜索和替换文本 data = data.replace(search_text, replace_text) # 以只写模式打开我们的文本文件以写入替换的内容 with open(r'林查胶印ID号.txt', 'w', encoding='UTF-8') as file: # 在我们的文本文件中写入替换的数据 file.write(data) # 打印文本已替换 print("文本已替换") bfile = codecs.open("林查胶印ID号.txt", 'r', "utf-8") ss = bfile.read() # print (ss) bfile.close() s = codecs.open("林查胶印ID号.txt", "w", "utf-16") s.write(ss) s.close()
时间: 2023-04-09 20:04:31 浏览: 67
import codecs 是 Python 中的一个模块,用于处理不同编码的文本文件。它提供了一些函数,可以将文本文件从一种编码转换为另一种编码,或者读取和写入不同编码的文本文件。这个模块在处理中文等非 ASCII 字符时非常有用。
相关问题
import codecs # 创建一个变量并存储我们要搜索的文本 search_text = "F:\" # 创建一个变量并存储我们要添加的文本 replace_text = "\\pc-20190606" # 使用 open() 函数以只读模式打开我们的文本文件 with open(r'林查胶印ID号.txt', 'r', encoding='UTF-8') as file: # 使用 read() 函数读取文件内容并将它们存储在一个新变量中 data = file.read() # 使用 replace() 函数搜索和替换文本 data = data.replace(search_text, replace_text) # 以只写模式打开我们的文本文件以写入替换的内容 with open(r'林查胶印ID号.txt', 'w', encoding='UTF-8') as file: # 在我们的文本文件中写入替换的数据 file.write(data) # 打印文本已替换 print("文本已替换") bfile = codecs.open("林查胶印ID号.txt", 'r', "utf-8") ss = bfile.read() # print (ss) bfile.close() s = codecs.open("林查胶印ID号.txt", "w", "utf-16") s.write(ss) s.close() 帮我找出bug
import codecs是Python中的一个模块,用于处理不同编码的文本文件。它提供了一些编码和解码的函数,可以将文本文件从一种编码格式转换为另一种编码格式,以便在不同的操作系统和应用程序之间进行交互。
import sys import re import jieba import codecs import gensim import numpy as np import pandas as pd def segment(doc: str): stop_words = pd.read_csv('data/stopwords.txt', index_col=False, quoting=3, names=['stopword'], sep='\n', encoding='utf-8') stop_words = list(stop_words.stopword) reg_html = re.compile(r'<[^>]+>', re.S) # 去掉html标签数字等 doc = reg_html.sub('', doc) doc = re.sub('[0-9]', '', doc) doc = re.sub('\s', '', doc) word_list = list(jieba.cut(doc)) out_str = '' for word in word_list: if word not in stop_words: out_str += word out_str += ' ' segments = out_str.split(sep=' ') return segments def doc2vec(file_name, model): start_alpha = 0.01 infer_epoch = 1000 doc = segment(codecs.open(file_name, 'r', 'utf-8').read()) vector = model.docvecs[doc_id] return model.infer_vector(doc) # 计算两个向量余弦值 def similarity(a_vect, b_vect): dot_val = 0.0 a_norm = 0.0 b_norm = 0.0 cos = None for a, b in zip(a_vect, b_vect): dot_val += a * b a_norm += a ** 2 b_norm += b ** 2 if a_norm == 0.0 or b_norm == 0.0: cos = -1 else: cos = dot_val / ((a_norm * b_norm) ** 0.5) return cos def test_model(file1, file2): print('导入模型') model_path = 'tmp/zhwk_news.doc2vec' model = gensim.models.Doc2Vec.load(model_path) vect1 = doc2vec(file1, model) # 转成句子向量 vect2 = doc2vec(file2, model) print(sys.getsizeof(vect1)) # 查看变量占用空间大小 print(sys.getsizeof(vect2)) cos = similarity(vect1, vect2) print('相似度:%0.2f%%' % (cos * 100)) if __name__ == '__main__': file1 = 'data/corpus_test/t1.txt' file2 = 'data/corpus_test/t2.txt' test_model(file1, file2) 有什么问题 ,怎么解决
在 `doc2vec()` 函数中,你在尝试访问 `doc_id` 变量,但是该变量未定义,这会导致 `NameError` 错误。你需要将该变量定义为函数的参数,并在调用函数时传递文档的标识符。
另外,在 `doc2vec()` 函数中,你在尝试将 `Doc2Vec` 模型返回的向量赋值给 `vector` 变量,但是该变量没有使用,这会导致不必要的计算和内存占用。你应该直接返回模型返回的向量。
最后,在 `test_model()` 函数中,你在尝试打印向量的内存占用大小,但是你应该打印向量本身的大小,而不是指向向量的变量的大小。你可以使用 `np.ndarray.nbytes` 属性来获取向量的大小。
下面是修改后的代码:
```
import sys
import re
import jieba
import codecs
import gensim
import numpy as np
import pandas as pd
def segment(doc: str):
stop_words = pd.read_csv('data/stopwords.txt', index_col=False, quoting=3,
names=['stopword'], sep='\n', encoding='utf-8')
stop_words = list(stop_words.stopword)
reg_html = re.compile(r'<[^>]+>', re.S) # 去掉html标签数字等
doc = reg_html.sub('', doc)
doc = re.sub('[0-9]', '', doc)
doc = re.sub('\s', '', doc)
word_list = list(jieba.cut(doc))
out_str = ''
for word in word_list:
if word not in stop_words:
out_str += word
out_str += ' '
segments = out_str.split(sep=' ')
return segments
def doc2vec(file_name, model, doc_id):
start_alpha = 0.01
infer_epoch = 1000
doc = segment(codecs.open(file_name, 'r', 'utf-8').read())
return model.infer_vector(doc, alpha=start_alpha, steps=infer_epoch)
# 计算两个向量余弦值
def similarity(a_vect, b_vect):
dot_val = 0.0
a_norm = 0.0
b_norm = 0.0
cos = None
for a, b in zip(a_vect, b_vect):
dot_val += a * b
a_norm += a ** 2
b_norm += b ** 2
if a_norm == 0.0 or b_norm == 0.0:
cos = -1
else:
cos = dot_val / ((a_norm * b_norm) ** 0.5)
return cos
def test_model(file1, file2):
print('导入模型')
model_path = 'tmp/zhwk_news.doc2vec'
model = gensim.models.Doc2Vec.load(model_path)
vect1 = doc2vec(file1, model, doc_id=0) # 转成句子向量
vect2 = doc2vec(file2, model, doc_id=1)
print(vect1.nbytes) # 查看向量大小
print(vect2.nbytes)
cos = similarity(vect1, vect2)
print('相似度:%0.2f%%' % (cos * 100))
if __name__ == '__main__':
file1 = 'data/corpus_test/t1.txt'
file2 = 'data/corpus_test/t2.txt'
test_model(file1, file2)
```