2024Python面试题——持续更新

1.关于Linux中查找文件的常用命令:

在Linux系统中,查找文件可以通过多种命令完成,这里介绍几个最常用的命令:

  1. find:

    • find 命令用于在目录树中查找文件,并对找到的文件执行指定的操作。
    • 示例:查找当前目录及子目录下所有 .txt 文件:
      find . -name "*.txt"
      
  2. locate:

    • locate 命令用于查找符合条件的文件,这个命令需要依赖于事先建立的文件数据库。相比 findlocate 通常查找得更快,但依赖于数据库的定期更新。
    • 示例:查找包含 example 的所有文件:
      locate example
      
  3. grep:

    • grep 命令用于搜索文件内容,而不是文件名,但它常被用来结合其他命令寻找特定的文件。
    • 示例:查找当前目录及子目录下所有文件中包含 “hello” 文字的文件:
      grep -r "hello" .
      

2.关于Python正则表达式中的转义字符和处理方法:

在Python的正则表达式中,一些字符具有特殊的含义,比如 .*?+^$ 等。如果要匹配这些字符本身,则需要使用转义字符 \

  • 常见的转义字符

    • \d:匹配任何十进制数;相当于类 [0-9]
    • \D:匹配任何非数字字符;相当于类 [^0-9]
    • \s:匹配任何空白字符;相当于类 [ \t\n\r\f\v]
    • \S:匹配任何非空白字符;相当于类 [^ \t\n\r\f\v]
    • \w:匹配任何字母数字字符;相当于类 [a-zA-Z0-9_]
    • \W:匹配任何非字母数字字符;相当于类 [^a-zA-Z0-9_]
  • 处理转义字符

    • 在字符串前加 r,表示原始字符串,用于防止Python解释器解释 \
    • 示例:
      import re
      regex = r"\d+\.txt"
      re.findall(regex, "123.txt 456.txt")
      
      

正则表达式中的特殊字符用于指定搜索模式的结构。这些字符有特定的含义,比如匹配任意字符、限定重复次数、创建字符集等。在使用正则表达式时,理解这些特殊字符是非常重要的。以下是一些常见的正则表达式特殊字符及其用法:

常见的特殊字符:

  1. . - 匹配除换行符外的任何单个字符。

    • 例如,a.b 可以匹配 “acb”、“aab”、“apb” 等。
  2. ^ - 匹配输入字符串的开始位置。

    • 例如,^Hello 匹配以 “Hello” 开头的任何字符串。
  3. $ - 匹配输入字符串的结束位置。

    • 例如,end$ 匹配以 “end” 结尾的任何字符串。
  4. * - 匹配前面的子表达式零次或多次。

    • 例如,bo* 可以匹配 “b”、“bo”、“boo”、“booo” 等。
  5. + - 匹配前面的子表达式一次或多次。

    • 例如,a+ 至少匹配一个 “a”(“a”、“aa”、“aaa” 等)。
  6. ? - 匹配前面的子表达式零次或一次。

    • 例如,do(es)? 可以匹配 “do” 或 “does”。
  7. {n} - n 是一个非负整数,正好匹配 n 次。

    • 例如,a{3} 将匹配 “aaa”。
  8. {n,} - n 是一个非负整数,至少匹配 n 次。

    • 例如,a{2,} 将匹配 “aa”、“aaa”、“aaaa” 等。
  9. {n,m} - m 和 n 是非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。

    • 例如,a{1,3} 将匹配 “a”、“aa” 或 “aaa”。
  10. [ ] - 表示一个字符集合。匹配所包含的任一字符。

    • 例如,[abc] 将匹配 “a”、“b” 或 “c”。
  11. [^ ] - 匹配未列出的任何字符。

    • 例如,[^abc] 将匹配除 “a”、“b”、“c” 之外的任何字符。
  12. | - 选择。匹配符号前或后的字符。

    • 例如,abc|def 可以匹配 “abc” 或 “def”。
  13. \ - 转义特殊字符。

    • 例如,\. 表示字面的 “.”。

处理正则表达式中的转义字符:

当你需要在模式中包括一个特殊字符时,就需要使用反斜杠 \ 对其进行转义。这是因为如果直接使用这些特殊字符,正则表达式引擎会将它们解释为控制命令而不是普通字符。

  • 例如,如果你想匹配一个实际的星号(*),你应该在正则表达式中使用 \*

这些特殊字符和转义技巧是正则表达式的基础,掌握它们对于构建有效的搜索模式非常重要。

3.关于Python的 sort() 函数原理:

  • 对纯数字排序

    • Python的 sort() 函数可以直接在列表等数据结构上调用,对纯数字的列表进行排序时,它按照数字的大小进行排序。
    • 原因:数字自身具有可比性,Python 内部实现了对数字类型的比较操作。
  • 对类实例排序

    • 当列表包含自定义的类实例时,Python不知道如何直接比较这些对象,因此需要提供一个比较的标准。
    • 通过 sort() 函数的 key 参数来指定排序的依据:
      class User:
          def __init__(self, user_id):
              self.user_id = user_id
      user_list = [User(99), User(17), User(2)]
      user_list.sort(key=lambda x: x.user_id)
      
    • 通过定义类的 __lt__ 方法来让类自身支持排序:
      class User:
          def __init__(self, user_id):
              self.user_id = user_id
          def __lt__(self, other):
              return self.user_id < other.user_id
      user_list.sort()
      

4.Shell脚本如何判断某文件是否存在

在 Shell 脚本中,判断文件是否存在是一个非常常见的操作。你可以使用 if 语句结合 [ 测试命令(或使用 [[ 来进行更现代的测试)来判断文件是否存在。这里有几种基本的方法:

1. 使用 [ -f ] 测试文件存在

-f 选项用于检查指定的文件是否存在且为普通文件(不是目录或设备文件)。

if [ -f "/path/to/your/file" ]; then
    echo "文件存在。"
else
    echo "文件不存在。"
fi

2. 使用 [ -e ] 测试文件或目录存在

-e 选项用来检查指定的文件或目录是否存在。

if [ -e "/path/to/your/file" ]; then
    echo "文件或目录存在。"
else
    echo "文件或目录不存在。"
fi

3. 使用更现代的 [[ ]] 测试

[[ ]] 是一个更现代的 Bash 测试构造,它比传统的 [ ] 提供了一些额外的便利,如更自然的语法和不需要担心某些字符引起的问题(如空格)。

if [[ -f "/path/to/your/file" ]]; then
    echo "文件存在。"
else
    echo "文件不存在。"
fi

4. 处理多个文件存在性检查

如果你需要检查多个文件是否存在,可以将它们组合在一起:

if [[ -f "/path/to/file1" && -f "/path/to/file2" ]]; then
    echo "两个文件都存在。"
else
    echo "至少有一个文件不存在。"
fi

5. 可以通过变量使用文件路径

也可以将文件路径存储在变量中,然后使用这些变量进行检查:

file_path="/path/to/your/file"
if [ -f "$file_path" ]; then
    echo "文件存在。"
else
    echo "文件不存在。"
fi

这些是在 Shell 脚本中检查文件存在性的基本方法,它们在日常脚本编写中非常实用,可以帮助你在执行文件操作之前确保文件的存在。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚务必早点睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值