python3爬取的内容可以print但是写入本地文件失败,但测试发现写入语句没有问题

python3

源码如下


import os # 调用系统变量
import re # 正则表达式相关
import urllib
import urllib.request
import urllib.error
import urllib.parse

import json
import socket

import time

class ImoocSpider:

    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
    def getPythonInfo(self,keyWord):
        myKeyWord = urllib.parse.quote(keyWord)
        searchUrl='https://www.imooc.com/search/?words='+myKeyWord
        try:
            request = urllib.request.Request(url=searchUrl, headers=self.headers)
            page = urllib.request.urlopen(request)
            rsp = page.read().decode('unicode_escape')
        except UnicodeDecodeError as e:
                print(e)
                print('-----UnicodeDecodeErrorurl:', searchUrl)
        except urllib.error.URLError as e:
                print(e)
                print("-----urlErrorurl:", searchUrl)
        except socket.timeout as e:
                print(e)
                print("-----socket timout:", searchUrl)
        else:
                myres=rsp
                self.saveFile(myres,keyWord)
        finally:
                page.close()
                print("get_finally")

    def saveFile(self,res,keyWord):
            b="./" + keyWord +'.txt'
            if not os.path.exists(b): # 判断路径指定下是否存在文件/文件夹
                try :
                    fp=open(b,'w') 
                    print(res,file=fp) #print到文件
                except :
                    # print (e)
                    print('文件写入有误')
                finally :
                   fp.close()
                   print('save_finally')



    def start (self, keyWord):
        self.getPythonInfo(keyWord) 


if __name__ == '__main__':
    imoocInfo = ImoocSpider()
    imoocInfo.start('python')

2个回答

测试了一下,就是编码的问题,open里面加一个参数

 encoding='utf-8'
m0_37148591
duxiuxiu 是你说的原因,谢谢你 送花送花
一年多之前 回复

应该是编码的问题
open(r'C:\nihao\result.txt','w',encoding='utf-8')
试试这个

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python3中pandas批量汇总多个Excel文件,如何将中文日期命名的文件名变成数字日期并写入Excel第一行?
文件名:2019年11月1日.xlsx~2019年11月30日.xlsx,文件里面数据没有标识日期,汇总后数据混乱,我需要把文件名改为数字日期并放在Excel第一行。 每个Excel中有多个工作表,初学Python,请各位指点。 代码如下 ``` ``` import pandas as pd import os import re list2 = os.listdir(r'c:\python\2019年11月\\') list1 = [] for name in list2: if re.findall('^2019年11月\d+日.xlsx', name): list1.append(name) # print(list1) dflist = [] for i in range(len(list1)): dflist.append(pd.read_excel(list1[i], header=2)) # print(dflist) data = pd.concat(dflist) data.to_excel('./123.xlsx') # 数据保存路径
python scrapy 爬取多页合并问题
scrapy学习有几个月了,普通scrapy和crawl都能够实现,现在碰到一个问题: 在使用scrapy爬取多分页后,如何把多分页内容合并写入到一个item[x]内? 我现在使用 yield Request 至 def art_url 来获取分页内容,用append把内容集合后,用 item['image_urls'] = self.art_urls 来接收结果, 但结果一直接收,每篇内容的分页的接收导致很多,请教一下,如何把每篇的分页内容合并写入一项itme? 刚学不到半年,代码凌乱,望包含,主要是想学习如何爬取小说站,把每一章都合并在一起,不要分页搞很多数据,和合适代码推荐下,研究学习,谢谢了 我的代码: ``` art_urls = [] rules = ( Rule(LinkExtractor(allow='wenzhang/',restrict_xpaths=('//table[@id="dlNews"]')), callback='parse_item', follow=True), ) def parse_item(self, response): print(response.url) item = SpiderItem() conn = Redis(host='127.0.0.1', port=6379) item['title'] = response.xpath('//h1/text()').extract_first() ex = conn.sadd('movies_url', response.url) for next_href in response.xpath('//div[@class="pager"]/ul/li/a/@href').extract(): next_url = self.base_url + next_href.replace('../','') if ex == 1: # print('开始解析单页') yield Request(next_url, callback=self.art_url) # yield scrapy.Request(url=next_url, callback=self.parse_detail, meta={'title': title,'img_src':img_src}) else: print("无数据更新!!!") # print(self.art_urls) item['image_urls'] = self.art_urls # print(len(item['image_urls'])) # print(item) yield item def art_url(self, response): art_urls = response.xpath('//div[@id="content"]/div/p/img/@src').extract() for art_url in art_urls: # 开始解析分页 art_url = art_url.replace('../../upload/','') self.art_urls.append(art_url) ```
再问python中写入文件失败
代码如下: ``` from win32com.client import DispatchBaseClass from win32com import client #获得com组件对象 com_instance = client.DispatchEx('{DBA56B2C-C868-4BD2-94CA-5101709CA61E}') #初始化com组件对象 com_instance.yh_interface_init('','') #指定格式填写好文件路径,该com组件使用xml交互 jysr_xml='<?xml version="1.0" encoding="GBK" standalone="yes" ?><input><prm_outputfile>C:\YHTEST\dmxxxz.txt</prm_outputfile></input>' #调用60号功能,参数为jysr_xml,其余参数为空即可 result= com_instance.yh_interface_call('60',jysr_xml,'','','','','') #看看结果如何 print result #显示:(u'', u'', u'<?xml version="1.0" encoding="GBK" standalone="yes" ?><output></output>', 1, u'') #最后第二个是成功标志“1”,最后是异常内容,为空 ``` 关于这段代码的故事是: 我用pywin32调用第三方com组件,组件中有一个方法是将返回数据写入指定路径txt文件,执行该方法,无报错,组件本身的标记也显示调用成功,指定文件也生成了,而且从文件生成到结束有一分钟多,感觉像是在写数据,。。。。。。。。但是!!!程序结束了,那个文件竟然是空的。。。空的。。。。0kb....0kb!!! 原来常见的Python写入文件有问题大多是没写close,但我这次碰到的是com组件自己写入文件,我也无处获得它的文件对象,我已经为了这个问题郁闷半天了
关于python装饰器多层闭包的提问
- ** 背景**:在学习装饰器中遇到问题 - ** 环境**:以下代码均为windows版anaconda3中执行的代码 - **问题**:尽管已经实践过并且没有找到可行的方法,但是我仍然想问,为什么不将logit和logging_decorator这两个函数合一,变成类似第二段代码的样式?我目前理解装饰器的核心是闭包,但是为什么不尽量减少闭包的数量,将功能尽并到一起?是因为无法实现吗? - **标准代码** ``` from functools import wraps def logit(logfile='out.log'): def logging_decorator(func): @wraps(func) def wrapped_function(*args, **kwargs): log_string = func.__name__ + " was called" print(log_string) # 打开logfile,并写入内容 with open(logfile, 'a') as opened_file: # 现在将日志打到指定的logfile opened_file.write(log_string + '\n') return func(*args, **kwargs) return wrapped_function return logging_decorator @logit() def myfunc1(): pass myfunc1() # Output: myfunc1 was called # 现在一个叫做 out.log 的文件出现了,里面的内容就是上面的字符串 ``` - **我的设想**(该代码会报错,仅用于注解猜想) ``` from functools import wraps def logging_decorator(func,logfile=''out.log): @wraps(func) def wrapped_function(*args, **kwargs): log_string = func.__name__ + " was called" print(log_string) # 打开logfile,并写入内容 with open(logfile, 'a') as opened_file: # 现在将日志打到指定的logfile opened_file.write(log_string + '\n') return func(*args, **kwargs) return wrapped_function @logging_decorator(logfile='out.log') def myfunc1(): pass myfunc1() # Output: myfunc1 was called # 现在一个叫做 out.log 的文件出现了,里面的内容就是上面的字符串 ```
求助:Python的Subprocess.popen()返回的对象的stdin怎么用以下代码为何写入后没反应也不会报错
Python ``` class Thread(threading.Thread): def __init__(self, name, sub): threading.Thread.__init__(self) self.name = name self.sub = sub def run(self): while True: if self.sub.poll() is not None: break command = bytes(str(input("console:").encode('utf-8')), encoding="utf-8") # print(type(command)) #下面这句不会报错,也执行了,就是无效,跟没有这句一样为啥 self.sub.stdin.write(command) is_input_started = False while True: empty = False try: enter = str(input('主文件路径:')) except SyntaxError: empty = True if not empty: if str(input('确定路径吗?(y,n):')) == 'y': break sub = subprocess.Popen(enter, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) while True: if sub.poll() is not None: print('Stopped') break out = sub.stdout.readline() if not out == "": print(out) if not is_input_started: thread = Thread.Thread('input', sub) thread.start() is_input_started = True ``` 输入后并没有任何反应,怎么办 求助:Python的Subprocess.popen()返回的对象的stdin怎么用以下代码为何写入后没反应也不会报错 求助:Python的Subprocess.popen()返回的对象的stdin怎么用以下代码为何写入后没反应也不会报错 运行的程序是长时间一直运行 过程中需要互交于是这个问题就来了
为什么用request-html爬取的内容为空?
以下是我的代码和运行结果,请问各位大佬为什么我运行内容为空?谢谢各位 ``` from requests_html import HTMLSession from requests_html import HTML import requests import time import json import random import sys import os import csv from fake_useragent import UserAgent# session = HTMLSession() url = 'https://car.autohome.com.cn/' #https://car.autohome.com.cn/config/series/3862.html USER_AGENTS = [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1", "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11", "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10" ] # 品牌列表 def get_bank(): response = session.get(url)#爬取网页 response.encoding='gbk' response.html.render() banks = response.html.find('div.cartree>ul>li>h3') for bank in banks: #print(bank.text) #print(bank.html) bk = bank.text start = bk.find("(") end = bk.find(")") print(bk[0:start]) print(bk[start+1:end]) print(banks) # 汽车品牌 def get_url(): current_dir = os.path.abspath('.')#返回绝对路径 print(current_dir) #print('1') file_name = os.path.join(current_dir, "\\bank.csv") print(file_name) response.encoding='gbk' # print('2') with open(file_name, 'wt', newline='') as csvfile1: header = ['bank','count', 'url'] writer = csv.writer(csvfile1) writer.writerow(header) #访问页面 response = session.get(url) #print(response) #response.html.render() banks = response.html.find('.cartree ul li h3 a') #banks = response.html.find('#cartree') print(banks) print('1') for bank in banks: #print(bank.text) #格式化 bk = bank.text print('2') print(bk) start = bk.find("(") end = bk.find(")") bank1 = bk[0:start] Num = bk[(start+1):end] url2 = url + bank.attrs.get("href", None) print(url2) save2csc(writer,bank1,Num,url2) #print(banks) csvfile1.close() # #写入CSV文件 def save2csc(writer,bank,num,url): header = ['bank','num' 'url'] writer.writerow(header) csvrow1 = [] csvrow1.append(bank) csvrow1.append(num) csvrow1.append(url) #writer.writerow(csvrow1) #print(csvrow1) if __name__ == '__main__': print("开始处理") get_url() get_bank() print("处理结束") ``` ![图片说明](https://img-ask.csdn.net/upload/201912/07/1575718518_178636.jpg)![图片说明](https://img-ask.csdn.net/upload/201912/07/1575718738_455103.jpg)
【python3.8字典问题请教】对Excel中数据提取,相同项对应值相加,写入新sheet表
![图片说明](https://img-ask.csdn.net/upload/201912/17/1576559364_374608.png) 我想提取Sheet表中的N、O和R列,对R列中相同姓名的人对应的N、O列的值分别相加,形成图2这样 ![图片说明](https://img-ask.csdn.net/upload/201912/17/1576559417_243731.png) ``` print('Opening workbook...') wb = openpyxl.load_workbook('C:/Users/mawenxin/Desktop/dome1/asd.xlsx') #打开Excel表格 sheet = wb.get_sheet_by_name('Sheet1') #获取工作表 nameData = { } #创建字典 print('Reading rows...') for row in range(2,sheet.max_row+1): #从第二行循环到最后一行 JE = sheet['N'+str(row)].value name = sheet['E'+ str(row)].value SY = sheet['O'+str(row)].value #存储每一列的数据 #字典结构nameData['姓名'][金额][使用金额] nameData={name,(JE,SY)} ``` 我按照网上以及书上的内容只能写这点,也不知道对不对 【问题】 **字典内能不能一个键对应两个值,或者对应一个元组或列表?** **用什么函数进行提取合并姓名?** **如果自定义函数要怎么写?** **能不能帮我写一下,琢磨很久了也不知道咋写**
使用Python 将某个excel 中的一列 写入 另一个excel 中的某一列
嗨 朋友们: 我还在编写这个程序中...然而遇到了一些新的麻烦... 想要实现的功能: 将某个excel 中的一列 写入 另一个excel 中的一列. 当前我已经可以通过自定义的 get infor() 函数 提取某一excel 表中的数据 并存储在列表 (L=[ ] )中, ![图片说明](https://img-ask.csdn.net/upload/201909/01/1567349983_131463.png) 并通过open excel cost () 函数 将这些信息插入到目标excel之中了。 然而,我发现自己所使用的 插入excel 的方法只能针对 某个 特定的 单元格 (如我代码之中的 "D2" 单元格)。 我想对这个open excel cost () 函数 代码进行调整,使得它可以根据get infor() 函数中的列表返回结果 对目标excel中的某一列 批量赋值。 请问应该如何实现呢? 我的代码如下, 感谢大佬们的辛苦指正 ``` import openpyxl import xlrd def get_infor(): book = xlrd.open_workbook('C:/Users/lenovo/Desktop/模板.xlsx') sheet = book.sheet_by_name('WRT模板IN') L =[] for i in range (2,sheet.nrows): # i 从第四列开始 PN = str(sheet.cell(i,5).value) Cost_USD = str(sheet.cell(i, 9).value) L.append((PN,Cost_USD)) #t=tuple(L) return L #print(L) t1= get_infor() #print(t1) # # sh = t1[0][0] # print(sh) # def Open_excel_cost(): workbook = openpyxl.load_workbook('C:/Users/lenovo/Desktop/文档模板/IN/Cost_IN.xlsx') sheet = workbook.worksheets[0] # 第一个页签 sheet['D2'] = t1[0][1] #sheet['A1'] = t1[1][2] workbook.save('C:/Users/lenovo/Desktop/文档模板/IN/Cost_IN.xlsx') # 此步骤要保存才行的, 否则是不会在excel中显示的 2019.8.24 print(sheet['D2'].value) print(sheet.title) Open_excel_cost() ```
python flask_sqlalchemy如何维护一个全局查询结果
在我的webapp中,每个页面都要用到同一个一般不会变化的查询结果,为避免每次访问都需查询一次这个变量,我在views.py中弄了一个全局变量ADMIN_NOTES ``` ADMIN_NOTES=Note.query.filter_by(author_id=ADMIN.id).all() ``` 而当ADMIN_NOTE会发生变化时,如此时管理员又写入了一个新note,则重新查询数据库获得最新的ADMIN_NOTE的值,尽量减少访问数据库的次数 我本想这么实现的(中间部分不重要的代码省略了) ``` #全局变量 ADMIN_NOTES=Note.query.filter_by(author_id=ADMIN.id).all() #写入新note的函数1 @app.route('/new_note',methods=['GET','POST']) def new_note(): global ADMIN_NOTES data=json.loads(request.get_data()) note=Note(title=data['note_title'],upload_time=datetime.utcnow()) db.session.add(note) db.session.commit() #若是管理员写入新note,则重新查询并修改全局变量ADMIN_NOTES if note.author.nickname=='ADMIN': ADMIN_NOTES=Note.query.filter_by(author_id=ADMIN.id).all() KAFENUT_NOTES[0].author.nickname #能正确访问ADMIN_NOTES print(len(ADMIN_NOTES)) #正确访问ADMIN_NOTES resp['success']=True resp['text']='Upload successfully!' resp['url']=url_for('note',note_id=note.id,nickname=note.author.nickname) #浏览器接受到服务器的json之后跳转到,resp[url]所指示的页面,即下面这个页面 return json.dumps(resp) #返回note页面的函数2 @app.route('/<nickname>/note/<note_id>',methods=['GET','POST']) def note(nickname,note_id): global ADMIN_NOTES user=User.query.filter_by(nickname=nickname).first() note=Note.query.filter_by(id=note_id).first() if request.method=='GET': note.view_num+=1 db.session.add(note) db.session.commit() for nnote in ADMIN_NOTES: print(nnote.author.nickname) #出错位置 return render_template('note_page.html',note=note,admin_notes=ADMIN_NOTES) ``` 然而问题也正出在这里,当管理员写入新的note之后(即ADMIN_NOTES这个全局变量发生变化之后)重新查询的语句虽然在函数1中执行了(print出的note数量是写入新note之后的数量,)。但当用户根据函数1返回的json跳转到函数2的时候,函数2内就无法正确访问ADMIN_NOTES,准确来说无法访问nnote.author.nickname,其中author是note表用author_id这个外键连接到user表得到的,错误栈如下 ``` Traceback (most recent call last): File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\app.py", line 1997, in __call__ return self.wsgi_app(environ, start_response) File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\app.py", line 1985, in wsgi_app response = self.handle_exception(e) File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\app.py", line 1540, in handle_exception reraise(exc_type, exc_value, tb) File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise raise value File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app response = self.full_dispatch_request() File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request rv = self.handle_user_exception(e) File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\app.py", line 1517, in handle_user_exception reraise(exc_type, exc_value, tb) File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise raise value File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request rv = self.dispatch_request() File "C:\Users\MSI-1\Anaconda3\lib\site-packages\flask\app.py", line 1598, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "E:\vs\python\AwesomeWebApp\AwesomeWebApp\app\views.py", line 232, in note print(nnote.author.nickname) #let author.id be preloaded File "C:\Users\MSI-1\Anaconda3\lib\site-packages\sqlalchemy\orm\attributes.py", line 282, in __get__ return self.impl.get(instance_state(instance), dict_) File "C:\Users\MSI-1\Anaconda3\lib\site-packages\sqlalchemy\orm\attributes.py", line 710, in get value = self.callable_(state, passive) File "C:\Users\MSI-1\Anaconda3\lib\site-packages\sqlalchemy\orm\strategies.py", line 688, in _load_for_state % (orm_util.state_str(state), self.key) sqlalchemy.orm.exc.DetachedInstanceError: Parent instance <Note at 0x26de5f41198> is not bound to a Session; lazy load operation of attribute 'author' cannot proceed (Background on this error at: http://sqlalche.me/e/bhk3) ``` sqlalchemy报出detached错误 sqlalchemy.orm.exc.DetachedInstanceError: Parent instance <Note at 0x26de5f41198> is not bound to a Session; lazy load operation of attribute 'author' cannot proceed (Background on this error at: http://sqlalche.me/e/bhk3) 这该怎么解决?或者还有什么其他方法实现:在我的webapp中,每个页面都要用到同一个一般不会变化的查询结果,为避免每次访问都需查询一次这个一般不会变量,我在views.py中弄了一个全局变量ADMIN_NOTES。而当ADMIN_NOTE会发生变化时,如此时管理员又写入了一个新note,则重新查询数据库获得最新的ADMIN_NOTE的值,尽量减少访问数据库的次数
python如何读取一个csv进行操作再将结果写入原文件?
文科生选了python数据处理,在做作业,转换的操作自己写了一部分,但是不会把等级和绩点写入到原文件中,下面的是作业的要求以及当前自己写的一些代码,求求大神们帮帮忙,万分感谢,下面一张是作业的要求,一张是自己已经写了的代码,以及同学敲的写入文件代码,但是没有看懂,有没有更好的写入的方法,万分感谢 ![图片说明](https://img-ask.csdn.net/upload/201905/07/1557195140_759629.png) ``` import numpy as np score = np.loadtxt('scores.csv',delimiter=',')#读取csv文件中的成绩信息,并使用“,”分割 level = []#创建记录等级的空列表 GPA = []#创建记录绩点的空列表 for i in score: gpa = round(i/10-5,1) if 95<=i<=100: print("成绩:{},等级:{},绩点:{}".format(i,'A+',gpa) level.append('A+') GPA.append(gpa) elif 90<=i<95: print("成绩:{},等级:{},绩点:{}".format(i,'A',gpa) level.append('A') GPA.append(gpa) elif 85<=i<90: print("成绩:{},等级:{},绩点:{}".format(i,'A-',gpa) level.append('A-') GPA.append(gpa) elif 82<=i<85: print("成绩:{},等级:{},绩点:{}".format(i,'B+',gpa) level.append('B+') GPA.append(gpa) elif 78<=i<82: print("成绩:{},等级:{},绩点:{}".format(i,'B',gpa) level.append('B') GPA.append(gpa) elif 75<=i<78: print("成绩:{},等级:{},绩点:{}".format(i,'B-',gpa) level.append('B-') GPA.append(gpa) elif 71<=i<75: print("成绩:{},等级:{},绩点:{}".format(i,'C+',gpa) level.append('C+') GPA.append(gpa) elif 66<=i<71: print("成绩:{},等级:{},绩点:{}".format(i,'C',gpa) level.append('C') GPA.append(gpa) elif 62<=i<66: print("成绩:{},等级:{},绩点:{}".format(i,'C-',gpa) level.append('C-') GPA.append(gpa) elif 60<=i<62: print("成绩:{},等级:{},绩点:{}".format(i,'D',gpa) level.append('D') GPA.append(gpa) elif i<60: print("成绩:{},等级:{},绩点:{}".format(i,'F',0) level.append('F') GPA.append(0) ``` 下面的是我同学写的写入原文件的操作,没看懂。麻烦解释一下,有没有更好的方法进行写入操作。 ![图片说明](https://img-ask.csdn.net/upload/201905/07/1557195427_713584.png) 补充一下他的满分作业的代码。 ![图片说明](https://img-ask.csdn.net/upload/201905/07/1557195787_574663.png)
python3 写文件最后一行不能换行?
写文件的代码在这里,发现写文件的时候,最后一行没有写入换行符号? ``` def consumer2(q,filename): with open(filename,'a+') as f: while True: res = q.get() if res is None: break # 收到结束信号 print(res) for i in res: f.write(i) f.write(' ') f.write('\n') ``` cat -A text.log ``` 1xxxxx $ // 第1行 2xxxxx $ . . . n-1xxx $ nxxxxx // 最后一行 ``` 最后一行居然没有换行符号,这是为什么?
python能成功爬取天气 不知道怎么加循环
现在能爬去数据, 但需要手动一个一个换城市和时间, 希望能加个循环,一次性爬玩选定城市所有时间的天气。 网站来自 天气网->历史天气。 网站特点:http://lishi.tianqi.com/'+position+'/'+date+'.html 我不知道怎么加循环 代码现在如下: ``` from selenium import webdriver from bs4 import BeautifulSoup import time import csv import os from openpyxl import workbook # 写入Excel表所用 chrome_options = webdriver.ChromeOptions() prefs = {"profile.managed_default_content_setting.images": 2} chrome_options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(chrome_options=chrome_options) driver.set_page_load_timeout(60) driver.set_script_timeout(60) def getId(): position = 'wulumuqi' #这里填写地方的缩拼音例如:安泽 date = '201901' #这里填写日期例如:2011年的2月 query_url = 'http://lishi.tianqi.com/'+position+'/'+date+'.html' wb = os.path.join('C:\\Users\\w4376\\OneDrive\\Desktop\\weather collecting\\') #指定路径打开 wb = workbook.Workbook() # 创建Excel对象 ws = wb.active # 获取当前正在操作的表对象 ws.append(['日期', '最高气温', '最低气温', '天气', '风向', '风力']) try: driver.get('http://tianqi.com/') time.sleep(2) driver.get(query_url) js = "window.scrollTo(0, 1800000);" driver.execute_script(js) time.sleep(2) res = driver.page_source soup = BeautifulSoup(res, 'html.parser') box = soup.find('div',class_='tqtongji2').find_all('ul')[1:] for item in box: date_detail = item.find_all('li')[0].get_text() #日期 print(date_detail) max_temperature =item.find_all('li')[1].get_text() #最高气温 print(max_temperature) min_temperature = item.find_all('li')[2].get_text() # 最低气温 print(min_temperature) temperature = item.find_all('li')[3].get_text() # 天气 print(temperature) wind_direction = item.find_all('li')[4].get_text() #风向 print( wind_direction) wind_power = item.find_all('li')[5].get_text() # 风力 if wind_power == ('微风'): wf=('0级') wind_power=wf print(wf) else: print(wind_power) if wind_direction == ('无持续风向'): wd=('无') wind_direction=wd print(wd) ws.append([date_detail, max_temperature,min_temperature, temperature, wind_direction,wind_power]) # spamwriter = csv.writer(csvfile, dialect='excel') # spamwriter.writerow([date_detail, max_temperature,min_temperature, temperature, wind_direction,wind_power]) wb.save(position+date+'.xlsx') # 存入所有信息后,保存为filename.xlsx except Exception as e: print(e) getId() ```
python中从txt中读取列表的疑问
[0.0, 2.303100877063917, 4.086570419967091, 4.5257380393305064, 4.84985960671861, 5.317629700058278] 我的 txt文件大概长这样,是原来用python将列表写入到txt文件中的 但是读取这个列表的时候,确实能显示这些数 但是调用的时候print list(0)显示的是[ print list(1)显示的是0 print list(3)显示的是. 大家有什么好办法吗 我想print list(0)显示0.0 printlist(1)显示2.303100877063917 我的txt已经生成了 用这个txt的情况下有办法解决吗 谢谢大家
爬虫部分数据写入excel失败
最近学习爬虫,参考大佬代码,但是爬取结果没有抬头,第三个爬取的数据并没有插入excel中 ``` import requests from lxml import etree from openpyxl import Workbook import random class tengxun(): def __int__(self): self.url = 'https://ke.qq.com/course/list?mt=1001&page={}' self.header = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0", "Connection": "keep - alive", } self.wb = Workbook() self.ws = self.wb.active self.ws.append(['title', 'link', 'now_reader']) def geturl(self): self.url = 'https://ke.qq.com/course/list?mt=1001&page={}' url = [self.url.format(i) for i in range(1,5)] return url def prase_url(self,url): self.header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0", "Connection": "keep - alive", } response = requests.get(url, headers=self.header, timeout=5) return response.content.decode('gbk', 'ignore') def get_list(self,html_str): html = etree.HTML(html_str) connect_list = [] lists = html.xpath("//li[@class ='course-card-item']") for list in lists: item = {} item['title'] = ''.join(list.xpath("./h4/a[@class = 'item-tt-link']/text()")) item['link'] = ''.join(list.xpath("./a[@class = 'item-img-link']/@href")) item['now_reader'] = ''.join(list.xpath("./div[@class = 'item-line item-line--moddle']/span[@class='line-cell item-user']/text()")) connect_list.append(item) return connect_list def save_list(self, connects): self.wb = Workbook() self.ws = self.wb.active for connect in connects: self.ws.append([connect['title'], connect['link'], connect['now_reader']]) print('保存成功页招聘信息') def run(self): url_list = self.geturl() for url in url_list: html_url = self.prase_url(url) connects = self.get_list(html_url) self.save_list(connects) self.wb.save(r'C:\Users\Administrator\Desktop\resource\UA_ls\demo_09 try.xlsx') if __name__=='__main__': spider = tengxun() spider.run() ```
python csv写入,为啥头信息会重复
第一次写的头信息只写入一次,正常 复制粘贴改了一些东西后,就每次都会写入一次头了 ------------------------------------------------------------- 正常的第一次 ``` tag_list = [] for tags in text['items']: #print(type(tags)) tag = tags['tag'] tag = tag_list.append(tag) #print(tag_list) #把标签和原文件内容一起写进新文件 tag_list = str(tag_list).replace('[','').replace(']','').replace('\'','') tou = ['title','content','baidu_tag'] with open('ahahaha22333.csv','a+',encoding='utf-8',newline='') as f: fwriter = csv.writer(f) csvrow1 = [] csvrow2 = [] csvrow3 = [] csvrow1.append(d['title']) csvrow2.append(d['content']) csvrow3.append(tag_list) fwriter.writerow(tou) fwriter.writerows(zip(csvrow1,csvrow2,csvrow3)) n = n + 1 print(str(n)) #------------------------------------------------ copy改动版后头信息会重复写入的 try: summary = text['summary'] except Exception as eee: print('---eee') print(eee) summary = '_' #print(summary) tou = ['title','content','summary'] with open('ahahaha22333.csv','a+',encoding='utf-8',newline='') as f: fwriter = csv.writer(f) csvrow1 = [] csvrow2 = [] csvrow3 = [] csvrow1.append(d['title']) csvrow2.append(d['content']) csvrow3.append(summary) #fwriter.writerow(tou) fwriter.writerows(zip(csvrow1,csvrow2,csvrow3)) n = n + 1 print(str(n)) ``` -----------------------------------------------------------
Python爬虫代码除了点问题,写入到csv文件出错,rows类型为list,求教各位大佬?
将数据存入csv文件时报错,然后各种查,就是解决不了,rows类型为list 部分源码: with open(city+'.csv','a') as f: fieldnames = ['name','area','address','total_price','unit_price','house_size','house_type'] writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writeheader() 46 rows = [name,area,address,total_price,unit_price,house_size,house_type,number] 47 print(type(rows)) 48 writer.writerow(rows) 报错信息: Traceback (most recent call last): File "/home/tom/PycharmProjects/spider1/spider1.py", line 48, in <module> writer.writerow(rows) File "/usr/lib/python3.6/csv.py", line 155, in writerow return self.writer.writerow(self._dict_to_list(rowdict)) File "/usr/lib/python3.6/csv.py", line 148, in _dict_to_list wrong_fields = rowdict.keys() - self.fieldnames AttributeError: 'list' object has no attribute 'keys' <class 'list'>
python如何抽取txt文件中用tab分隔的第一个字符串并去重?
环境:python3 现有一个三元组的txt文件,每个三元组占一行,实体和属性用tab键隔开; 如何抽取出每一行的第一个实体并将其写入一个txt,一个实体占一行。数据量比较大大概6500万条 我这么写的,是不是正则表达式的问题? ```python import datetime import re start_time = datetime.datetime.now() print("start time:", start_time) count = 1 f = open(r'D:\bishe_data\test.txt',encoding='utf-8',mode='r') line = f.readline() while line != "": s = re.split('^[^\s]+/t'',' ',data) print(s) line = f.readline() f.close() end_time = datetime.datetime.now() print("end_time:", end_time) print("during:", end_time - start_time) print(count) ``` 求大神解答!!
输出的结果无法写入txt 文件 显示为nonetype
``` import os a = os.popen('ps axu | grep "jiaoben.py" | grep -v "grep" | wc -l').read() b = int(a) def ceshi(): if b == 1: print('right') else: print('error') c = ceshi() print(c.__class__) f = open('HHHhhw.txt','a+') f.write(c) ``` 我想把结果的 right 和error写入txt文件 但是print出来的c的属性是nonetype error <class 'NoneType'> Traceback (most recent call last): File "jiankong.py", line 12, in <module> f.write(c) 请问大神们应该怎么处理
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问