金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > 取下标及性能问题,用python与文件进行交互

取下标及性能问题,用python与文件进行交互

发布时间:2019-12-15 19:42编辑:编程浏览(85)

    。。。。。。

        a.打开文本文件

    #r,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    f=open('a.txt',encoding='utf-8')
    data1=f.read()
    print(f.readline(),end='')
    print(f.readlines())
    
    #w,只写模式【不可读;不存在则创建;存在则清空内容】
    f=open('a.txt','w',encoding='utf-8')
    f.write('werf')
    
    #a,只追加写模式【不可读;不存在则创建;存在则只追加内容】
    f=open('a.txt','a',encoding='utf-8')
    f.write('werfn')
    
    "+" 表示可以同时读写某个文件
    r+, 可读可写,若文件不存在,报错
    w+,可读可写,若文件不存在,创建
    a+, 写读【可读,可写】
    x, 只写模式【不可读;不存在则创建,存在则报错】
    x+ ,写读【可读,可写】
    U ,  所有的行分割符通过 Python 的输入方法(例#如 read*() ),返回时都会被替换为换行符n. ('rU' 模式也支持 'rb' 选项
    

     

    b.对于非文本文件,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式

    with open('1.jpg','rb') as f_read:
        data=f_read.read()
        print(data)
    
    with open('a.txt','rb') as f_read:
        data=f_read.read().decode('utf-8') #解码
        print(data)
    
    with open('a.txt','wb')as f_write:
        f_write.write('adsf'.encode('utf-8'))
    
    '''
    练习,利用b模式,编写一个cp工具,要求如下:
    
      1. 既可以拷贝文本又可以拷贝视频,图片等文件
    
      2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target_file
    '''
    import sys
    if len(sys.argv)!=3:
        print('usage:cp source_file target_file')
        sys.exit()
    source_file,target_file=sys.argv[1],sys.argv[2]
    print()
    with open(source_file,'rb')as f_read,open(target_file,'wb')as f_write:
        for line in f_read:
            f_write.write(line)
    

    UTF-8

    String 通过 utf8 属性获得 String.UTF8View,表示 UTF-8 编码的内容。String.UTF8View 通过 String.UTF8View.Index 取下标得到 UTF8.CodeUnit,实际上是 UInt8;通过 Range<String.UTF8View.Index> 取下标得到 String.UTF8View。String.UTF8View.Index 要从 String.UTF8View 中获取。String.UTF8View 不遵循 RandomAccessCollection 协议,用 String.UTF8View.Index 取下标不可以随机访问。用 String.UTF8View 生成 Array<UInt8>,可以用 Int、Range<Int> 取下标。用 String.UTF8View 可以生成 String。用 UInt8 或 Array<UInt8> 也可以生成 String,但内容表示数字或数字数组,不是数字的 UTF-8 编码内容。

    let str = "abc"
    let utf8 = str.utf8 // String.UTF8View
    let n = utf8[utf8.startIndex] // UInt8 97
    let a = utf8[utf8.startIndex..<utf8.index(after: utf8.startIndex)] // String.UTF8View "a"
    let ab = utf8[utf8.startIndex...utf8.index(after: utf8.startIndex)] // String.UTF8View "ab"
    String(n) // "97", NOT "a"
    String(a) // "a"
    String(ab) // "ab"
    
    let arr = Array(utf8) // Array<UInt8> [97, 98, 99]
    let n2 = arr[0] // UInt8 97
    let arr2 = arr[0...1] // // ArraySlice<UInt8> [97, 98]
    

    String 通过 utf8CString 属性获得 ContiguousArray<CChar>,实际上是 ContiguousArray<Int8>,表示 UTF-8 编码的内容并且末尾增加一个 0,所以长度比 utf8 属性的长度大 1。ContiguousArray<Int8> 可以用 Int、Range<Int> 取下标,分别得到 Int8 和 ArraySlice<Int8>。ContiguousArray 遵循 RandomAccessCollection 协议,用 Int 取下标可以随机访问。

    let str = "abc"
    let utf8 = str.utf8CString // ContiguousArray<Int8> [97, 98, 99, 0]
    let a = utf8[0] // Int8 97
    let ab = utf8[0...1] // ArraySlice<Int8> [97, 98]
    

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully
    flag: Bool) {
    }

    一.文件处理

    Character

    String 通过 characters 属性获得 String.CharacterView,表示屏幕上显示的内容。String.CharacterView 通过 String.CharacterView.Index 取下标得到 Character,String.CharacterView.Index 要从 String.CharacterView 中获取

    let str = "abc"
    let characters = str.characters // String.CharacterView
    characters[characters.startIndex] // Character "a"
    

    注意,String.CharacterView 不遵循 RandomAccessCollection 协议,用 String.CharacterView.Index 取下标不可以随机访问。另外,String.CharacterView.Index 与 String.Index 是相同的类型,属于 Struct。String.Index 的文档在 String 文档下

    typealias Index = String.CharacterView.Index
    

    String.CharacterView 通过 Range<String.CharacterView.Index> 得到 String.CharacterView。用 Character 和 String.CharacterView 都可以生成 String

    let str = "abc"
    let characters = str.characters // String.CharacterView
    let characters2 = characters[characters.startIndex..<characters.index(after: characters.startIndex)] // String.CharacterView
    String(characters.first!) == String(characters2) // true. characters.first! is Character
    

    用 String.CharacterView 生成 Array<Character>,可以用 Int、Range<Int> 取下标。用 Array<Character> 也可以生成 String

    let str = "abc"
    let arr = Array(str.characters) // Array<Character> ["a", "b", "c"]
    arr[1] // Character "b"
    arr[1...2] // ArraySlice<Character> ["b", "c"]
    String(arr) // String "abc"
    

    Character 可以直接与 "a" 比较

    let str = "abc"
    let a = str[str.startIndex] // Character "a"
    let b = str[str.index(str.startIndex, offsetBy: 1)] // Character "b"
    a == "a" // true
    b > "a" // true
    

    出错截屏如下:

    3.文件内光标的移动

    #以文本模式读文件,n代表的是字符的个数
    with open('a.txt','r')as f_read:
        data=f_read.read(6)
        print(data)
    
    #以b模式读文件,n代表的是字节的个数
    with open('a.txt','rb')as f_read:
        data=f_read.read(6)
        print(data)
    
    # tell:告诉当前光标的位置
    with open('a.txt','r',encoding='utf-8')as f_read:
        data=f_read.read(4)
        data1=f_read.tell()
        print(data,data1)
    
    # seek:移动光标(0:文件开头默认;1:文件当前光标;2:文件末尾)
    with open('a.txt', 'r', encoding='utf-8')as f_read:
        data = f_read.seek(3)
        data1 = f_read.read()
        print(data, data1)
    

     

    # 实现tail功能
    import time
    with open('access.log', 'rb')as f_read:
        f_read.seek(0,2)
        while True:
            line = f_read.readline()
            if line:
                print(line.decode('utf-8'),end='')
            else:
                time.sleep(1)
    

    String

    String 用 String.Index 取下标(subscript)得到 Character,String.Index 要从 String 中获取

    let greeting = "Guten Tag!"
    greeting[greeting.startIndex] // Character "G"
    greeting[greeting.index(before: greeting.endIndex)] // Character "!"
    greeting[greeting.index(after: greeting.startIndex)] // Character "u"
    let index = greeting.index(greeting.startIndex, offsetBy: 7)
    greeting[index] // Character "a"
    

    String 用 Range<String.Index> 或 ClosedRange<String.Index> (以下 Range 和 ClosedRange 统称为 Range) 取下标得到 String

    let str = "abc"
    str[str.startIndex..<str.index(after: str.startIndex)] // String "a"
    str[str.startIndex...str.index(after: str.startIndex)] // String "ab"
    

    而在另一些机器上,只要设置了是用音频,就可以正常播放。

    2.打开文件的模式

    应用

    具体应用时,选取哪种编码方式、取下标方式?首先,编码方式要看具体应用场景。编码方法不同,字符串的长度可能不同。如果字符串只含英文,比较好办。如果字符串含有中文或 Emoji,选择编码方式就要慎重。注意,NSString 的 length 属性获得的长度对应 UTF-16 编码。

    let str = "abc"
    str.characters.count // 3
    str.unicodeScalars.count // 3
    str.utf16.count // 3
    (str as NSString).length // 3
    str.utf8.count // 3
    str.utf8CString.count - 1 // 3
    strlen(str) // 3
    
    let emojiStr = "
    		

    本文由金沙国际官网发布于编程,转载请注明出处:取下标及性能问题,用python与文件进行交互

    关键词: