精华内容
下载资源
问答
  • 如题,有些时候涉及到在不同的系统平台上对文件做一些操作,但是往往有一些操作并不是兼容的,比如说 Mac OS/Linux 系统和 Windows 系统之间,Python 里的 os 模块的某些功能便不是兼容的。 接下来给大家安利一款...

    前言

    如题,有些时候涉及到在不同的系统平台上对文件做一些操作,但是往往有一些操作并不是兼容的,比如说 Mac OS/Linux 系统和 Windows 系统之间,Python 里的 os 模块的某些功能便不是兼容的。
    接下来给大家安利一款文件处理和路径相关操作的库 pathlib

    正文

    首先,假设现在我们有这样一个需求,将某个目录中带有 .txt 后缀的文件修改成 .csv 的形式,那么根据以往经验,我们可以使用 os 模块来解决这个需求如下:

    import os 
    
    def modify_suffix(path):
        for file_name in os.listdir(path):
            base_name, suffix = os.path.splitext(file_name)
            if suffix == '.txt':
                file_path = os.path.join(path, file_name)
                os.rename(file_path, os.path.join(path, f'{base_name}.csv'))
    

    上面的代码块用到了下面这些函数:

    • os.listdir(path):列出 path 目录下的所有文件(含文件夹);
    • os.path.splitext(filename):切分文件名里面的基础名称和后缀部分;
    • os.path.join(path,filename):组合需要操作的文件名为绝对路径;
    • os.rename(...):重命名某个文件。

    上面的代码实现下来,对于我这个‘老手’来说可能没什么,但是对于新手,无疑需要记住的东西有点多,其实我们还可以使用其它的方式进行替代。

    使用 pathlib 模块改写代码:
    pathlibPython Version 3.4 以后开始引入的一个新的标准库模块。为了让文件处理变的更简单,它基于面向对象思想设计,封装了非常多与文件操作相关的功能。改写代码如下:

    from pathlib import Path
    
    def modify_suffix_with_pathlib(path):
        for file_path in Path(path).glob('*.txt'):
            file_path.rename(file_path.with_suffix('.csv'))
    

    上述代码的解释:

    • 首先使用 Path(path) 将字符串路径转换为 Path 对象;
    • 调用 .glob('*.txt') 对路径下所有文件内容进行模式匹配并返回生成器对象,结果仍然是 Path 对象,所以我们可以接着做后面的操作;
    • 使用 .with_suffix(suffix) 返回一个新的路径并修改 suffix。如果原本的路径没有后缀,新的 suffix 则被追加以代替。如果 suffix 是空字符串,则原本的后缀被移除;
    • 调用 .rename(target_name) 完成原文件的重命名。

    显然,使用 pathlib 完成上述的需求比使用 os 完成要更加的简洁和方便。

    另外,我们也提到了,在不同的系统平台,表示路径的方式也有些许区别,最典型的 Mac OS/Linux 系统和 Windows 系统,路径分隔符的表示方式就不一样,一个是斜杠“/”,一个是反斜杠“\”,同样一段表示路径的代码,很明显有些时候无法在两个平台上通用,怎么办?使用 pathlib 就对了!!!

    # 方法一:使用 os.path 模块
    >>> import os
    >>> os.path.join(r'\foo', 'bar')
    '\\foo\\bar'
    
    # 方法二:使用 os 模块
    >>> import os
    >>> r'\foo' + os.sep + 'bar'
    '\\foo\\bar'
    
    # 方法三:使用 pathlib 模块
    >>> from pathlib import Path
    >>> Path(r'\foo') / 'bar'
    WindowsPath('/foo/bar')
    
    >>> print(Path(r'\foo') / 'bar')
    \foo\bar
    
    >>> Path(r'\foo').joinpath(*['a', 'b', 'c'])
    WindowsPath('/foo/a/b/c')
    

    获取文件名及后缀:

    >>> filename = Path("foo.txt")
    >>> filename.name
    'foo.txt'
    
    >>> filename.suffix
    '.txt'
    
    >>> filename.stem
    'foo'
    
    # 判断文件是否真实存在
    >>> filename.exists()
    False
    

    使用 pathlib 来读取文件中的内容:

    # 以前的标准读取文件的方法:
    with open('bar.txt') as f:
        context = f.read(buffer)
        print(context)
    
    # 使用pathlib的做法:
    from pathlib import Path
    all_context = Path(bar.txt").read_text()
    

    如果你想要一次性读取文件中的所有内容,显然使用 pathlib 的优势更加明显,但是,如果你想按字节读取或者按行读取,使用以前的标准做法更接地气!

    当然,除了以上这些好用的功能之外,pathlib 还有其它的实用功能,建议大家闲暇时可以去 官方文档 一睹为快!

    其中给大家再安利一个黑魔法:PEP-519 里定义了一个专门用于“文件路径”的新对象协议,这意味着从该 PEP 生效后的 Python Version 3.6 版本起,pathlib 里的 Path 对象,可以和以前绝大多数只接受字符串路径 os.PathLike 的标准库函数兼容使用:

    >>> path = Path(r'\foo')
    >>> os.path.join(path, 'bar')
    '\\foo\\bar'
    

    所以,事不宜迟,以后只要是涉及到路径的操作,都可以使用 pathlib 快速帮你实现!
    对了,如果你使用的还是较早的 Python 版本,可以尝试安装使用 pathlib2 这个库,效果杠杠滴!

    展开全文
  • 前言如题,有些时候涉及到在不同的系统平台上对文件做一些操作,但是往往有一些操作并不是兼容的,比如说Mac OS/Linux系统和Windows系统之间,Python 里的os模块的某些功能便不是兼容的。接下来给大家安利一款文件...

    前言

    如题,有些时候涉及到在不同的系统平台上对文件做一些操作,但是往往有一些操作并不是兼容的,比如说

    Mac OS/Linux

    系统和

    Windows

    系统之间,Python 里的

    os

    模块的某些功能便不是兼容的。

    接下来给大家安利一款文件处理和路径相关操作的库

    pathlib

    正文

    首先,假设现在我们有这样一个需求,将某个目录中带有

    .txt

    后缀的文件修改成

    .csv

    的形式,那么根据以往经验,我们可以使用

    os

    模块来解决这个需求如下:

    import os

    def modify_suffix(path):

    for file_name in os.listdir(path):

    base_name, suffix = os.path.splitext(file_name)

    if suffix == '.txt':

    file_path = os.path.join(path, file_name)

    os.rename(file_path, os.path.join(path, f'{base_name}.csv'))

    上面的代码块用到了下面这些函数:

    os.listdir(path)

    :列出

    path

    目录下的所有文件(含文件夹);

    os.path.splitext(filename)

    :切分文件名里面的基础名称和后缀部分;

    os.path.join(path,filename)

    :组合需要操作的文件名为绝对路径;

    os.rename(...)

    :重命名某个文件。

    上面的代码实现下来,对于我这个‘老手’来说可能没什么,但是对于新手,无疑需要记住的东西有点多,其实我们还可以使用其它的方式进行替代。

    使用

    pathlib

    模块改写代码:

    pathlib

    Python Version 3.4

    以后开始引入的一个新的标准库模块。为了让文件处理变的更简单,它基于面向对象思想设计,封装了非常多与文件操作相关的功能。改写代码如下:

    from pathlib import Path

    def modify_suffix_with_pathlib(path):

    for file_path in Path(path).glob('*.txt'):

    file_path.rename(file_path.with_suffix('.csv'))

    上述代码的解释:

    首先使用

    Path(path)

    将字符串路径转换为

    Path

    对象;

    调用

    .glob('*.txt')

    对路径下所有文件内容进行模式匹配并返回生成器对象,结果仍然是

    Path

    对象,所以我们可以接着做后面的操作;

    使用

    .with_suffix(suffix)

    返回一个新的路径并修改

    suffix

    。如果原本的路径没有后缀,新的

    suffix

    则被追加以代替。如果

    suffix

    是空字符串,则原本的后缀被移除;

    调用

    .rename(target_name)

    完成原文件的重命名。

    显然,使用

    pathlib

    完成上述的需求比使用

    os

    完成要更加的简洁和方便。

    另外,我们也提到了,在不同的系统平台,表示路径的方式也有些许区别,最典型的

    Mac OS/Linux

    系统和

    Windows

    系统,路径分隔符的表示方式就不一样,一个是斜杠“/”,一个是反斜杠“\”,同样一段表示路径的代码,很明显有些时候无法在两个平台上通用,怎么办?使用

    pathlib

    就对了!!!

    # 方法一:使用 os.path 模块

    >>> import os

    >>> os.path.join(r'\foo', 'bar')

    '\\foo\\bar'

    # 方法二:使用 os 模块

    >>> import os

    >>> r'\foo' + os.sep + 'bar'

    '\\foo\\bar'

    # 方法三:使用 pathlib 模块

    >>> from pathlib import Path

    >>> Path(r'\foo') / 'bar'

    WindowsPath('/foo/bar')

    >>> print(Path(r'\foo') / 'bar')

    \foo\bar

    >>> Path(r'\foo').joinpath(*['a', 'b', 'c'])

    WindowsPath('/foo/a/b/c')

    获取文件名及后缀:

    >>> filename = Path("foo.txt")

    >>> filename.name

    'foo.txt'

    >>> filename.suffix

    '.txt'

    >>> filename.stem

    'foo'

    # 判断文件是否真实存在

    >>> filename.exists()

    False

    使用

    pathlib

    来读取文件中的内容:

    # 以前的标准读取文件的方法:

    with open('bar.txt') as f:

    context = f.read(buffer)

    print(context)

    # 使用pathlib的做法:

    from pathlib import Path

    all_context = Path(bar.txt").read_text()

    如果你想要一次性读取文件中的所有内容,显然使用

    pathlib

    的优势更加明显,但是,如果你想按字节读取或者按行读取,使用以前的标准做法更接地气!

    当然,除了以上这些好用的功能之外,

    pathlib

    还有其它的实用功能,建议大家闲暇时可以去

    官方文档

    一睹为快!

    其中给大家再安利一个黑魔法:

    PEP-519

    里定义了一个专门用于“文件路径”的新对象协议,这意味着从该

    PEP

    生效后的

    Python Version 3.6

    版本起,

    pathlib

    里的

    Path

    对象,可以和以前绝大多数只接受字符串路径

    os.PathLike

    的标准库函数兼容使用:

    >>> path = Path(r'\foo')

    >>> os.path.join(path, 'bar')

    '\\foo\\bar'

    所以,事不宜迟,以后只要是涉及到路径的操作,都可以使用

    pathlib

    快速帮你实现!

    对了,如果你使用的还是较早的

    Python

    版本,可以尝试安装使用

    pathlib2

    这个库,效果杠杠滴!

    展开全文
  • 首先在我们进行信息系统的开发时候,数据库应用必不可少,对于一个企业级别数据库应用很少是只使用一块磁盘,很多都是使用RAID磁盘阵列,来提高磁盘访问性能与数据兼容性容错等,RAID可以分为几个级别,每...
    首先在我们进行信息系统的开发的时候,数据库的应用必不可少,对于一个企业级别的数据库应用很少是只使用一块磁盘的,很多都是使用RAID磁盘阵列,来提高磁盘的访问性能与数据兼容性容错等,RAID可以分为几个级别,每个级别都对应不同的算法,SQL Server 2005常用的有几个级别0,1,5,10 下面我来简单说说这个几个级别的区别及其应用。

    RAID 0 简称磁盘条带化,它可以提供最好的读写性能,如果你把两块磁盘做成了RAID0,那么在写入数据的时候就可以是同时对A磁盘B磁盘同时写入,这样肯定是能提高读写性能的,但是这样也带来了一个问题就是,如果其中的一部分数据丢失了,你的全部数据都不会找回来的,因为RAID0没有提供冗余恢复数据的策略。所以RAID0可以用在只读的数据库数据表,或者是经过复制过来的数据库上,如果你对数据丢失不敏感的话也可以使用,总之这个level下是高性能无冗余。

    RAID 1 磁盘镜像 它对读没有什么影响,如果有两块磁盘它只对写有影响,因为它采用了一块磁盘做冗余备份的方法,这样如果你的两块磁盘是100G,那么你只能使用50G ,这种方法会影响磁盘的空间使用,降低了I/O 写的性能。

    RAID 5 与RAID1 不同之处就是多了奇偶校验,所有的奇偶校验的信息会遍布各个磁盘,性能上要比RAID1高些,但是一旦发生磁盘I/O失败,就会造成性能急剧下降,同时这种方法也在RAID0 与RAID1间折了中,是比较通用的做法。

    RAID 10 就是RAID0 与 RAID1的组合,它提供了高性能,高可用性,性能上要比RAID5好,特别适合大量写入的应用程序,但是就是成本比较高无论是多少块磁盘你都是将损失一半的磁盘存储。

    转载于:https://www.cnblogs.com/guodapeng/archive/2008/02/28/1084395.html

    展开全文
  • 关于不同cpu架构APP的兼容问题

    千次阅读 2017-06-22 17:10:35
    Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。(ABI 决定了二进制文件如何与...

    问题

    发现app无法运行在某些设备上。提示“此应用与您手机不兼容”


    原因

    应用与手机不兼容是因为手机cpu架构问题。Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。(ABI 决定了二进制文件如何与系统进行交互。)这些不同的架构与我们在开发app的过程中又有什么关联呢?
    不难发现架构不同的关键点就是ABI的不同,而ABI又决定了系统与二进制文件交互方式,所以我们可以联想到jni或者ndk开发。其中在使用jni开发的过程中,我们会使用到.so动态库。.so文件就是与系统交互的二进制文件。所以当我们的项目中包含.so文件时我们就应该考虑到cpu的兼容问题了。


    如何做兼容

    在我们的jniLibs目录下新建以下目录
    这里写图片描述
    每一个目录都对应一种ABI。我们需要将对应的.so库放在对应的目录下。

    • 并且在Android Gradle 插件中,可以使用如下方式对 abi 进行过滤:
    android {
        ...
    
        defaultConfig {    
            ...
            ndk {
                // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置
                abiFilters 'armeabi'// 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
            }
        }
    
    }
    
    • 在gradle.properties 文件中添加:
        android.useDeprecatedNdk=true

    这样就可以解决兼容问题了。
    但是在实际开发中我们发现.so文件都会很大。以百度地图sdk为列,如果所有平台都要兼容,我们的app会变的很大。借鉴一下QQ的做法,解压qqAPK后发现qq只有一个目录armeabi。所以我们在实际开发中也只需要兼容armeabi就可以了。(具体为啥,有待考察,可能是市面上大部分设备都是arm架构吧!)


    参考连接

    http://www.cnblogs.com/Bugtags2015/p/5578541.html

    记录学习,仅供参考!

    展开全文
  • 为了兼容之前版本的文件系统,Ext4整体实现比较复杂,本文重点介绍其extent模式。相对于Ext3文件系统,Ext4文件系统在数据存储方面做了一些优化处理,可以针对小文件和大文件有不同的模式,从而提高文件访问的性能。...
  • 为了兼容之前版本的文件系统,Ext4整体实现比较复杂,本文重点介绍其extent模式。相对于Ext3文件系统,Ext4文件系统在数据存储方面做了一些优化处理,可以针对小文件和大文件有不同的模式,从而提高文件访问的性能。...
  • 但是由于每一个文件系统底层机制不同,操作系统如何兼容各个文件系统? 这就是虚拟文件系统VFS功能了。VFS是操作系统文件模块一个软件层,对上面用户空间提供统一操作接口,同时也对下层提供了一套必须实现...
  • 键值为WINXPSP3 RUNASADMIN),在win7 32位系统上正常,可执行文件的全路径就是盘符+目录名+文件名,但是在win7 64位系统上这种可执行文件的全路径名系统不认,需要改成类似下面这种路径名:SIGN.MEDIA=19E8728 ...
  • 为了兼容之前版本的文件系统,Ext4整体实现比较复杂,本文重点介绍其extent模式。相对于Ext3文件系统,Ext4文件系统在数据存储方面做了一些优化处理,可以针对小文件和大文件有不同的模式,从而提高文件访问的性能。...
  • 微服务中如何实现不同生产环境维护不同的数据库脚本技术背景配置 技术背景 目前微服务以其各种优势已经占据了各大应用系统,俨然已经形成了很强的发展趋势,微服务系统有自己一套优秀的配置管理机制。一般都是通过...
  • 文件系统,是系统对文件的存放排列方式,不同格式的文件系统关系到数据是如何在磁盘进行存储,文件名、文件权限和其他属性也存在不同。 下面分别看一下这三种文件系统: 1) FAT32: 优点: 兼容性比较好,几乎目前...
  • PPT演示文稿、Word文档和...很多工具都有不同的版本,兼容不同的系统,有时候对于一些文件来说可能出现打不开的情况,或者出现排版混乱、图片变形等。而把文件转换成PDF文件就能解决这个问题。下面我就来教教大家...
  • PDF文件兼容不同的系统,如果用旧版本的电脑可能就打不开新版本的文档,或者出现排版混乱、图片变形等清理。而PDF格式就能很好地解决这个问题。有时候一些演讲用到的PPT演示文稿或者上课时老师用到的PPT,当中有...
  • 不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。Linux下:2. 方法一 SQL脚本形式操作步骤如下:2.1. 导出SQL脚本在原数据库...
  • 不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。Linux下:2.方法一SQL脚本形式操作步骤如下:2.1.导出SQL脚本在原数据库...
  • 不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。Linux下:2. 方法一 SQL脚本形式操作步骤如下:2.1. 导出SQL脚本在原数据库...
  • 1、引言  由于系统需要提供给用户导入Excel文件数据功能,但Excel文件有97-2003和2007+...对Excel文件的读取可通过JXL或POI两个Jar来完成,决定使用POI来开发,但POI对两种格式处理又有所不同,那么如何通过POI灵
  • 正文网络模型为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标标准化组织制定了开放式系统互联通信参考模型(pen System Interconnection Reference Model),也就是 ...
  • 不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。 所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。 Linux下: 2. 方法一 SQL脚本形式 操作步骤如下: 2.1. 导出SQL脚本 ...
  • 本节内容部分内容摘自《深入理解Java虚拟机:JVM高级特性与最佳...然而不同的平台或不同的语言却通过字节码来实现了无关性 Class类文件 Java技术能够一直保持着非常良好的向后兼容性,Class文件结构的稳定功不可没,.
  • 在以前接触项目中,由于很多客户对微软Excel操作比较熟练,客户经常要求系统支持对Excel文件的读写。用.NET传统方法对Excel进行读写时,往往会涉及到不同版本兼容的问题,导致在本地测试一切正常,但是到客户那...
  • 当你向Linux、Unix中安装Windows软件时,难免会遇见一些问题。这时,你就需要Wine的帮助了。...它为不同程序提供不同的安装配置文件:Adobe Photoshop、Dreamweaver、Flash、Excel、Word、Powerpoint、Mi
  • 更改某些 SQL Server 系统数据库位置必须遵循步骤与更改用户数据库位置必须遵循步骤不同。将分别对这些特殊情况给予说明。 注意:SQL Server 7.0 系统数据库与 SQL Server 2000 不兼容。不要将 SQL ...
  • ...MySQL数据库导入,有两种方法: ...2) 直接拷贝数据库目录和文件。...在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。 所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法
  •     1. 概述MySQL数据库导入,有两种方法:1) 先导出数据库SQL脚本,再导入;...在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介...
  • 不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。 所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。 Linux下: 2. 方法一 SQL脚本形式 操作步骤如下: 2.1. 导出SQL脚本...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 264
精华内容 105
关键字:

不同的文件系统如何兼容