精华内容
下载资源
问答
  • python 中 open与with open 的区别

    千次阅读 2019-01-12 14:42:56
    python文件读写,以后就用with open语句 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不...

    转载自:https://www.cnblogs.com/ymjyqsx/p/6554817.html

    python文件读写,以后就用with open语句
    读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。

    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

    读文件
    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

    f = open(’/Users/michael/test.txt’, ‘r’)
    标示符’r’表示读,这样,我们就成功地打开了一个文件。

    如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:

    f=open(’/Users/michael/notfound.txt’, ‘r’)
    Traceback (most recent call last):
    File “”, line 1, in
    FileNotFoundError: [Errno 2] No such file or directory: ‘/Users/michael/notfound.txt’
    如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:

    f.read()
    ‘Hello, world!’
    最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

    f.close()
    由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

    try:
    f = open(’/path/to/file’, ‘r’)
    print(f.read())
    finally:
    if f:
    f.close()

    但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

    with open(’/path/to/file’, ‘r’) as f:
    print(f.read())
    这和前面的try … finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

    调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

    如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

    for line in f.readlines():
    print(line.strip()) # 把末尾的’\n’删掉
    写文件
    写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:

    f = open(’/Users/michael/test.txt’, ‘w’)
    f.write(‘Hello, world!’)
    f.close()
    你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

    with open(’/Users/michael/test.txt’, ‘w’) as f:
    f.write(‘Hello, world!’)
    要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码

    字符编码
    要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:

    f = open(’/Users/michael/gbk.txt’, ‘r’, encoding=‘gbk’)
    f.read()
    ‘测试’
    遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:

    f = open(’/Users/michael/gbk.txt’, ‘r’, encoding=‘gbk’, errors=‘ignore’)
    二进制文件
    前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用’rb’模式打开文件即可:

    f = open(’/Users/michael/test.jpg’, ‘rb’)
    f.read()
    b’\xff\xd8\xff\xe1\x00\x18Exif\x00\x00…’ # 十六进制表示的字节

    总结:以后读写文件都使用with open语句,不要再像以前那样用f = open()这种语句了

    展开全文
  • joinWithwith区别

    千次阅读 2019-01-22 10:20:16
    $query = User::find()-&...with([ 'message' => function($query){ $query->where(['!=','title','']); } ]); $res = $query->asArray()->all(); //SQL 'SELE...
    $query = User::find()->select('username,id');
    $query->with([
    	'message' => function($query){
    		$query->where(['!=','title','']);
    	}
    ]);
    $res = $query->asArray()->all();
    
    //SQL
    'SELECT `username`, `id` FROM `yii_user`'
    'SELECT * FROM `yii_message` WHERE `user_id` IN (1,2);
    
    //结果
    {
        "code": 200,
        "message": "OK",
        "data": [
            {
                "username": "admin",
                "id": "1",
                "message": [
                    {
                        "id": "1",
                        "title": "消息",
                        "content": "呃呃呃",
                        "user_id": "1",
                        "created_at": "1542938501",
                        "updated_at": "1542938501"
                    }
                ]
            },
            {
                "username": "zhangsan",
                "id": "2",
                "message": []
            }
        ]
    }
    
    
    
    $query = User::find()->alias('u')->select('u.username,u.id');
    $query->joinWith([
    	'message' => function($query){
    		$query->alias('m')->where(['!=','m.title','']);
    	}
    ]);
    $res = $query->asArray()->all();
    
    //SQL
    'SELECT `u`.`username`, `u`.`id` FROM `yii_user` `u` LEFT JOIN `yii_message` `m` ON `u`.`id` = `m`.`user_id` WHERE `m`.`title` != \'\''
    
    //结果
    {
        "code": 200,
        "message": "OK",
        "data": [
            {
                "username": "admin",
                "id": "1",
                "message": [
                    {
                        "id": "1",
                        "title": "消息",
                        "content": "呃呃呃",
                        "user_id": "1",
                        "created_at": "1542938501",
                        "updated_at": "1542938501"
                    }
                ]
            }
        ]
    }
    
    
    //结论
    而针对于这两者,官网上是这样说的:
    yii\db\ActiveQuery::joinWith() 和 yii\db\ActiveQuery::with() 的区别是 前者连接主模型类和关联模型类的数据表来检索主模型,而后者只查询和检索主模型类来检索主模型。
    由于这个区别,你可以应用只针对一条 JOIN SQL 语句起效的查询条件。 如,通过关联模型的查询条件过滤主模型,如前例, 可以使用关联表的列来挑选主模型数据,
    
    用我自己的语言,总结如下:
    注意: 我把关联表,叫做 "副表",
    
    1、当你使用关联查询的时候, 你想排除掉副表不满足的条件下, 主表也给排除掉, 那么我们这时候就选 JoinWith
    2、当你不介意对应的副表是否满足条件时, 只需要把主表显示出来就行了, 那么我们这时就选with
    3、你观察sql,你会发现, 用with的时候, 没有with对应的sql语句, 而JoinWith对应的sql语句是存在的, 这点可以注意一下
    4、使用JoinWith关联的时候要用alias,否则报错
    

     

    展开全文
  • GRANT object_priv[(columns)][ON object] TO {user|role|public} [WITH GRANT OPTION] · 回收通过revoke 语法: REVOKE object_priv[(columns)][ON object] FROM {user[,user...]|role|public} [CASCADE ...

    权限

    用户权限有两类:

    系统权限:所谓系统权限指的是用户能够做什么事情的权限(系统权限是对用户而言)。

    对象权限:某种权限用户对其他用户的表或试图的存取权限(是针对表或试图而言的)。


    官方文档:SQL Refference ---> 18 SQL Statements:DROP SEQUENCE to ROLLBACK 或搜索 "GRANT"


    · 查看系统都具备哪些权限

    select privilege from dba_sys_privs;

    · 查看当前会话都具备哪些权限

    select * from session_privs;//查看当前会话的系统权限

    select * from user_tab_privs;      //查看当前会话的对象权限

    ·  dba_sys_privs 表字段含义 

    desc dba_sys_privs
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     GRANTEE                                   NOT NULL VARCHAR2(30)
    //角色和用户
     PRIVILEGE                                 NOT NULL VARCHAR2(40)//权限
     ADMIN_OPTION                                       VARCHAR2(3)

    · 授权通过grant

    语法:GRANT object_priv[(columns)][ON object] TO {user|role|public} [WITH GRANT OPTION]

    · 回收通过revoke

    语法:REVOKE object_priv[(columns)][ON object] FROM {user[,user...]|role|public} [CASCADE CONSTRINTS]


    撤销具有ADMIN OPTION 的系统权限(权限回收无级联 适用系统权限和角色)


    撤销具有GRANT OPTION 的对象权限(权限回收有级联  适用对象权限)




    实验测试两种级联授权

    -----WITH ADMIN OPTION

    [oracle@whgg ~]$ sqlplus / as sysdba


    SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 5 11:09:53 2014


    Copyright (c) 1982, 2005, Oracle.  All rights reserved.




    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options


    SYS@ORCL>create user tyger1 identified by tyger1 account unlock;


    User created.


    SYS@ORCL>create user tyger2 identified by tyger2 account unlock;


    User created.


    SYS@ORCL>grant connect to tyger1 with admin option;                // 级联授予tyger1 connect 权限


    Grant succeeded.


    SYS@ORCL>conn tyger1/tyger1
    Connected.
    TYGER1@ORCL>grant connect to tyger2;


    Grant succeeded.


    TYGER1@ORCL>conn tyger2/tyger2
    Connected.
    TYGER2@ORCL>conn / as sysdba
    Connected.
    SYS@ORCL>select * from dba_role_privs where grantee in ('TYGER1','TYGER2');


    GRANTEE                        GRANTED_ROLE                   ADM DEF
    ------------------------------ ------------------------------ --- ---
    TYGER1                         CONNECT                        YESYES
    TYGER2                         CONNECT                        NO  YES


    SYS@ORCL>revoke connect from tyger1;


    Revoke succeeded.


    SYS@ORCL>conn tyger1/tyger1
    ERROR:                                                                // error 说明 tyger1的connect 权限已经被收回
    ORA-01045: user TYGER1 lacks CREATE SESSION privilege; logon denied


    Warning: You are no longer connected to ORACLE.
    @>conn tyger2/tyger2
    Connected.
    TYGER2@ORCL>                                                  // tyger2 的 connect 还有
    TYGER2@ORCL>select * from user_sys_privs;


    no rows selected


    TYGER2@ORCL>conn / as sysdba
    Connected.
    SYS@ORCL>select * from dba_role_privs where grantee in ('TYGER1','TYGER2');


    GRANTEE                        GRANTED_ROLE                   ADM DEF
    ------------------------------ ------------------------------ --- ---
    TYGER2                         CONNECT                        NO  YES


    ------WITH GRANT OPTION

    继续赋予tyger1 的connect 权限做实验


    SYS@ORCL>grant connect to tyger1;


    Grant succeeded.


    SYS@ORCL>select * from dba_role_privs where grantee in ('TYGER1','TYGER2');


    GRANTEE                        GRANTED_ROLE                   ADM DEF
    ------------------------------ ------------------------------ --- ---
    TYGER1                         CONNECT                        NO  YES
    TYGER2                         CONNECT                        NO  YES


    SYS@ORCL>grant select on scott.emp to tyger1 with grant option;                 // 赋予tyger1查询scott用户emp表的权限   级联
     


    Grant succeeded.

    TYGER1@ORCL>select count(*) from scott.emp;


      COUNT(*)
    ----------
            14


    TYGER1@ORCL>grant select on scott.emp to tyger2;                     // 通过用户tyger1 赋予 查询scott 用户 emp 表的权限


    Grant succeeded.


    TYGER1@ORCL>conn tyger2/tyger2
    Connected.
    TYGER2@ORCL>select count(*) from scott.emp;


      COUNT(*)
    ----------
            14


    TYGER2@ORCL>conn / as sysdba
    Connected.
    SYS@ORCL>desc dba_tab_privs;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     GRANTEE                                   NOT NULL VARCHAR2(30)
     OWNER                                     NOT NULL VARCHAR2(30)
     TABLE_NAME                                NOT NULL VARCHAR2(30)
     GRANTOR                                   NOT NULL VARCHAR2(30)
     PRIVILEGE                                 NOT NULL VARCHAR2(40)
     GRANTABLE                                          VARCHAR2(3)
     HIERARCHY                                          VARCHAR2(3)

    SYS@ORCL>col grantee for a20
    SYS@ORCL>col owner for a10
    SYS@ORCL>col table_name for a10
    SYS@ORCL>col grantor for a10
    SYS@ORCL>col privilege for a10
    SYS@ORCL>l
      1* select * from dba_tab_privs where grantee in ('TYGER1','TYGER2')
    SYS@ORCL>/


    GRANTEE              OWNER      TABLE_NAME GRANTOR    PRIVILEGE  GRA HIE
    -------------------- ---------- ---------- ---------- ---------- --- ---
    TYGER1               SCOTT      EMP        SCOTT      SELECT     YES NO
    TYGER2               SCOTT      EMP        TYGER1     SELECT     NO  NO


    SYS@ORCL>revoke select on scott.emp from tyger1;              // 从用户tyger1中回收查询scott用户表emp的权限


    Revoke succeeded.


    SYS@ORCL>select * from dba_tab_privs where grantee in ('TYGER1','TYGER2');                  // 用户tyger2 的查询权限 级联回收


    no rows selected


    SYS@ORCL>conn tyger2/tyger2
    Connected.
    TYGER2@ORCL>select count(*) from scott.emp;
    select count(*) from scott.emp
                               *
    ERROR at line 1:
    ORA-00942: table or view does not exist




    TYGER2@ORCL>

    展开全文
  • as 和 with区别

    千次阅读 2017-02-21 10:58:06
    as 与with 都可以构成结构来表示伴随状语,as 在此结构中是一个连词,而with 是一个介词,因此构成不同的结构来表示伴随状语: 结构不同: As+主语+谓语动词,主句 With +名,代词 +介词、形容词,副词,...
    as 与with 都可以构成结构来表示伴随状语,as 在此结构中是一个连词,而with 是一个介词,因此构成不同的结构来表示伴随状语:
    
      结构不同:
    
      As+主语+谓语动词,主句
    
      With +名,代词 +介词、形容词,副词,分词,不定式
    
       eg.  As the production increased by 20 percent,we have had another good harvest year.
    
            With the production up by 20 percent,we have had ....
    
        随着产量增长20%,.......
    
    He enjoys listening to music with his eyes closed.
    
       他喜欢闭着眼睛听
     。
    
    He came out of the room with his eyes shining.
    
    他走出房间,眼里闪着亮光。
    
    Don't speak with your mouth full.
    
    嘴里吃东西时不要讲话。
    
    Mother looked at me with tears in her eyes.
    
    母亲含泪看着我。
    
    with独立结构的位置可前可后,如:
    
    With a lot of work to do,he felt even busier.
    
    有大量工作要做,他感到更忙了。
    
    With a lot of work done,he felt he would have a good rest.
    
    做完了工作,他感到他要好好休息一下。
    展开全文
  • Python open和with open用法和区别

    千次阅读 2020-12-12 11:00:38
    一、区别 使用open打开文件,必须要使用close关闭文件,所以,为了保证无论是否出错都能正确地关闭文件。 with open可以不用close()方法关闭文件,无论在文件使用中遇到什么问题都能安全的退出,即使发生错误,退出...
  • 1、使用load $posts = Post::all(); ...2、使用with ...$posts = Post::with('user')->...多个教材属于一个目录,那么利用懒加载,你就可以通过先把目录读出来,然后把这些目录有...
  • 1.with关联查询  例如,查询评论 $post = Post::find()->with('comments');... SELECT * FROM `comment` WHERE post_id IN (...) 结合Pagination分页查询OK 2.joinWith关联查询,返回  $po
  • in blocking mode n no-blocking mode有啥区别? HAL_I2C_Master_TransmitHAL_I2C_Master_Transmit_IT一个是在blocking模式一个是在no-blocking 模式 阻塞模式和非阻塞模式...... 我的理解是: 阻塞模式就像是...
  • python文件读写,分为open()与with open as file()两种。 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作...
  • "message": "Could not resolve view with name 'api/company/info' in servlet with name 'dispatcherServlet'", "path": "/api/company/info" } 2,原因 因为返回信息为json对象,本人在controller方法...
  • with as 和 临时表的区别

    千次阅读 2020-09-23 15:57:43
    1.with as with as 只是把子查询的语句当作了一个表,但是真实的数据并没有插入到数据库,它的好处是增加了代码的可读性和进行维护。 --设计累计发生 with ljfssj as ( select b.ProjGUID, COUNT(*) Ljfscs, ...
  • in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException: null 异常截图: 原因分析 我总结...
  • sockaddr和sockaddr_in区别

    千次阅读 2017-05-27 13:56:53
    这些地址结构通常以sockeaddr_开头,每一个协议族有一个唯一的后缀,例如对于以太网,其结构名称为sockaddr_in.  1.通用套接字数据结构  通用的套接字地址类型的定义如下,它可以在不同协议族之间进行强制转换。 ...
  • Detecting Text in Natural Image with Connectionist Text Proposal Network
  •  用外置声卡的时候就比较疑惑MICIN和LINEIN区别,不过也没去细究,用CODEC芯片的时候,开始想去看看究竟有什么不同了!  数据手册上是进行端口说明的:  MICIN Buffered amplifier input suitable foruse
  • open()和with open() as的区别

    万次阅读 多人点赞 2018-10-11 14:33:42
    file = open("test.txt","r") for line in file.readlines(): print line file.close() 这样直接打开文件,...with open("test.txt","r") as file: for line in file....
  • 这里,表一给出了RDH在空间域和压缩域的区别。文件大小扩展是RDH在压缩领域的一个重要指标。而JPEG图像作为压缩域的一种格式,在通信中的应用越来越广泛,因此本文对JPEG图像中的RDH进行了研究。 率失真性能和文件...
  • 本文为In-memory Computing with SAP HANA on Lenovo X6 Systems第七章Business continuity and resiliency for SAP HANA的读书笔记。 Overview of business continuity options业务连续性有不同的级别,采用何种...
  • 苹果授权登录(Sign in with Apple)-JAVA后端开发

    千次阅读 热门讨论 2020-05-28 12:04:59
    IOS授权登录流程微信授权登录大同小异,唯一区别的在于需要调用苹果api获取公钥,接口地址为:https://appleid.apple.com/auth/keys。 首先是IOS APP端拿到identifyToken交给后端,后端拿到identifyToken后,首先...
  • like,notlike,in_,notin_,is_,isnot,startswith,endswith,contains,desc,asc,between,distinct 本次数据查询参考模型类和数据如下:(Flask环境) class Protocols(db.Model) id = db.Column(db.Integer, primary_...
  • 最近在项目中犯了一个低级的错误,很low的错误,...Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]:   Initialization of bean failed; nested ...
  • binary_cross_entropy和binary_cross_entropy_with_logits都是来自torch.nn.functional的函数,首先对比官方文档对它们的区别: 函数名 解释 binary_cross_entropy Function that measures the Binary Cross...
  • 《Recursive Recurrent Nets with Attention Modeling for OCR in the Wild》已经被CVPR 2016(CV领域三大顶会之一)正式接收了,主要是介绍了在lexicon-free的情况下,使用带Attention Model的recurcive RNN识别...
  • 开发Springboot,写完各个Service,调试controller...Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.N...
  • [ERROR] 2017-11-29 11:02:59,435 org.spring...org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/spring
  • DB2 with的定义用法

    万次阅读 2016-03-25 11:01:04
    With定义用法 -------部分内容为转载并经整理处理--------------------- 1.with理解基本用法 说起WITH 语句,除了那些第一次听说WITH语句的人,大部分人都觉得它是用来做递归查询的。其实那只是...
  • TIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE数据类型 TIMESTAMP WITH TIME ZONE Datatype TIMESTAMP WITH TIME ZONE is a variant of TIMESTAMP that includes a time zone offset in its value....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 301,429
精华内容 120,571
关键字:

with与in的区别