<commit_before># **输入与输出**
***

## **1. 读取命令行选项**
    1) 命令行选项放置在列表sys.argv中，第一个元素是程序名称，后续是在命令行
       上程序名称之后显示的选项；
    2) 对于复杂的命令行处理，可以使用optparse模块；
          import optparse
          p = optparse.OptionParser()
          # 接受一个参数
          p.add_option('-o', action='store', dest='outfile')
          p.add_option('--output', action='store', dest='outfile')
          # 设置一个布尔标志
          p.add_option('-d', action='store_true', dest='debug')
          p.add_option('--debug', action='store_true', dest='debug')
          # 设置选项默认值
          p.set_defaults(debug=False)
          # 解析命令行
          opts, args = p.parse_args()
          # 取出命令行参数
          outfile = opts.outfile
          debug = opts.debug
    3) 返回的(opts, args)二元组，opts是包含已解析选项值的对象，args是命令行
       上未解析为选项的项目列表；

## **2. 环境变量**
    1) 可以通过os.environ访问环境变量；
    2) 可以直接修改os.environ字典来修改环境变量；
    3) 修改os.environ会同时影响到正在运行的程序和Python创建的子进程；

## **3. 文件和文件对象**
    1) 内置函数open(name[, mode[, bufsize]])用于打开和创建文件对象；
    2) mode的取值与C语言fopen类似；
    3) 可选参数bufsize控制文件的缓冲行为：
          0 => 表示没有缓冲；
          1 => 表示进行了行缓冲；
          负值 => 表示采用系统默认设置；
    4) Python3中open增加了额外的参数:
        open(name[,mode[,bufsize[,encoding[,errors[,newline[,closefd]]]]]])
        * encoding表示编码名称：'utf-8', 'ascii'；
        * errors是处理编码错误的错误处理策略；
        * newline控制通用换行符模式的行为(None, '', '\n', '\r', '\r\n')，如
          果设置None，那'\n','\r'或'\r\n'形式结尾的任何行都会被转换为'\n'；
          如果设置为''，所有这些行结束形式都会被识别成换行符，但输入文本中不
          会转换；
        * closefd控制在调用close()方法时是否实际关闭底层文件描述符(默认True)
    5) 文件方法：
        * f.read([n])         => 最多读取n个字节
        * f.readline([n])     => 读取单行输入的最多n个字符，省略则读取整行；
        * f.readlines([size]) => 读取所有行返回一个列表，size可选表示读取数
        * f.write(s)          => 写入字符串s
        * f.writelines(lines) => 写入序列lines中的所有字符串
        * f.close()           => 关闭文件
        * f.tell()            => 返回当前的文件指针
        * f.seek(offset[,whence]) => 查找新文件位置
        * f.isatty()          => 如果f是一个交互式终端，则返回1
        * f.flush()           => 清除输出缓冲区
        * f.truncate([size])  => 将文件截断为最多size字节
        * f.fileno()          => 返回一个整数文件描述符
        * f.next()            => 返回下一行或引发StopIteration;
                                 Python3中为f.__next__()
    6) Python2中各种读取操作返回8位字符串，无论指定的文件模式是什么；Python3
       中如果文本模式返回Unicode字符串，二进制模式返回字节字符串；
    7) 文件对象属性
        * f.closed    => 布尔值，表示文件状态；文件已打开为False，关闭为True
        * f.mode      => 文件的IO模式
        * f.name      => 使用open()创建文件则为文件名称，否则是表示文件来源
                         的字符串
        * f.softspace => 布尔值，指示在print时是否应该在一个值之前打印空格字
                         符；模仿文件的类必须提供该名称的一个可写属性，该属
                         性初始化为0(仅Python2)
        * f.newlines  => 在通用换行符模式下打开一个文件时该属性包含可在文件
                         中实际找到的换行符表示；
        * f.encoding  => 一个字符串，指示文件编码；如果没任何编码则为None;

## **4. 标准输入、输出和错误**
    1) sys.stdin是与提供给解释器的输入字符流相对应的文件对象；
    2) sys.stdout是一个文件对象，接收由print生成的输出；
    3) sys.stderr是接收错误消息的文件；
    4) stdin被映射到用户的键盘，stdout和stderr在屏幕上生成文本；
    5) 内置函数raw_input(prompt)可以从stdin读取一行文本，并打印一个提示符，
       它读取的行不包含行尾的换行符；Python3中为input()
    6) 键盘中断(Ctrl+C)生成KeyboardInterrupt异常；
    7) sys.stdin, sys.stdout, sys.stderr的原始值可以在sys.__stdin__, 
       sys.__stdout__, sys.__stderr__中提供；<commit_msg>add information about print statement<commit_after># **输入与输出**
***

## **1. 读取命令行选项**
    1) 命令行选项放置在列表sys.argv中，第一个元素是程序名称，后续是在命令行
       上程序名称之后显示的选项；
    2) 对于复杂的命令行处理，可以使用optparse模块；
          import optparse
          p = optparse.OptionParser()
          # 接受一个参数
          p.add_option('-o', action='store', dest='outfile')
          p.add_option('--output', action='store', dest='outfile')
          # 设置一个布尔标志
          p.add_option('-d', action='store_true', dest='debug')
          p.add_option('--debug', action='store_true', dest='debug')
          # 设置选项默认值
          p.set_defaults(debug=False)
          # 解析命令行
          opts, args = p.parse_args()
          # 取出命令行参数
          outfile = opts.outfile
          debug = opts.debug
    3) 返回的(opts, args)二元组，opts是包含已解析选项值的对象，args是命令行
       上未解析为选项的项目列表；

## **2. 环境变量**
    1) 可以通过os.environ访问环境变量；
    2) 可以直接修改os.environ字典来修改环境变量；
    3) 修改os.environ会同时影响到正在运行的程序和Python创建的子进程；

## **3. 文件和文件对象**
    1) 内置函数open(name[, mode[, bufsize]])用于打开和创建文件对象；
    2) mode的取值与C语言fopen类似；
    3) 可选参数bufsize控制文件的缓冲行为：
          0 => 表示没有缓冲；
          1 => 表示进行了行缓冲；
          负值 => 表示采用系统默认设置；
    4) Python3中open增加了额外的参数:
        open(name[,mode[,bufsize[,encoding[,errors[,newline[,closefd]]]]]])
        * encoding表示编码名称：'utf-8', 'ascii'；
        * errors是处理编码错误的错误处理策略；
        * newline控制通用换行符模式的行为(None, '', '\n', '\r', '\r\n')，如
          果设置None，那'\n','\r'或'\r\n'形式结尾的任何行都会被转换为'\n'；
          如果设置为''，所有这些行结束形式都会被识别成换行符，但输入文本中不
          会转换；
        * closefd控制在调用close()方法时是否实际关闭底层文件描述符(默认True)
    5) 文件方法：
        * f.read([n])         => 最多读取n个字节
        * f.readline([n])     => 读取单行输入的最多n个字符，省略则读取整行；
        * f.readlines([size]) => 读取所有行返回一个列表，size可选表示读取数
        * f.write(s)          => 写入字符串s
        * f.writelines(lines) => 写入序列lines中的所有字符串
        * f.close()           => 关闭文件
        * f.tell()            => 返回当前的文件指针
        * f.seek(offset[,whence]) => 查找新文件位置
        * f.isatty()          => 如果f是一个交互式终端，则返回1
        * f.flush()           => 清除输出缓冲区
        * f.truncate([size])  => 将文件截断为最多size字节
        * f.fileno()          => 返回一个整数文件描述符
        * f.next()            => 返回下一行或引发StopIteration;
                                 Python3中为f.__next__()
    6) Python2中各种读取操作返回8位字符串，无论指定的文件模式是什么；Python3
       中如果文本模式返回Unicode字符串，二进制模式返回字节字符串；
    7) 文件对象属性
        * f.closed    => 布尔值，表示文件状态；文件已打开为False，关闭为True
        * f.mode      => 文件的IO模式
        * f.name      => 使用open()创建文件则为文件名称，否则是表示文件来源
                         的字符串
        * f.softspace => 布尔值，指示在print时是否应该在一个值之前打印空格字
                         符；模仿文件的类必须提供该名称的一个可写属性，该属
                         性初始化为0(仅Python2)
        * f.newlines  => 在通用换行符模式下打开一个文件时该属性包含可在文件
                         中实际找到的换行符表示；
        * f.encoding  => 一个字符串，指示文件编码；如果没任何编码则为None;

## **4. 标准输入、输出和错误**
    1) sys.stdin是与提供给解释器的输入字符流相对应的文件对象；
    2) sys.stdout是一个文件对象，接收由print生成的输出；
    3) sys.stderr是接收错误消息的文件；
    4) stdin被映射到用户的键盘，stdout和stderr在屏幕上生成文本；
    5) 内置函数raw_input(prompt)可以从stdin读取一行文本，并打印一个提示符，
       它读取的行不包含行尾的换行符；Python3中为input()
    6) 键盘中断(Ctrl+C)生成KeyboardInterrupt异常；
    7) sys.stdin, sys.stdout, sys.stderr的原始值可以在sys.__stdin__, 
       sys.__stdout__, sys.__stderr__中提供；

## **5. print语句**
    1) Python2中的print语句，可根据sys.stdout中包含的文件生成输出；print接受
       一个逗号分隔的对象列表；
    2) 对于每个对象将调用str()来生成输出字符串；
    3) 为print语句最后提供一个结束逗号，在下一条print将在打印更多项目之前插
       入一个空格；否则输出一个换行终止符；
    4) 可更改print的目标，添加特殊的>>file修饰符和一个逗号，file是一个允许写
       入的文件对象：
          f = open('output', 'w')
          print >>f, 'hello world'
          ...
          f.close()
{'fraction_non_alphanumeric': 0.13275379401797555, 'fraction_numerical': 0.011492559304552822, 'mean_word_length': 2.141138361869505, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 51, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2339889', 'n_tokens_mistral': 3577, 'n_tokens_neox': 4065, 'n_words': 326}