【问题标题】:How to get only a part from a string in python如何从python中的字符串中只获取一部分
【发布时间】:2018-11-30 15:41:08
【问题描述】:

我有一个包含以下字符串的列表:

total 71708
-rw-rw-rw- 1   gpatwprd        tmwdprd 221     Nov 19 12:36 20181116.Something name.6781773.CSV
-rw-rw-rw- 1   gpatwprd        tmwdprd 221     Nov 19 12:36 20171116.Something name.67885.CSV

我想提取:

  1. 仅从 20181116 开始的文件名(或任何其他数据,这是一个动态数字)
  2. 仅包含 .CSV 和 .XLSX 的文件名

请注意,文件名的长度是可变的。

如何在 python 3 中做到这一点?

【问题讨论】:

  • 开始于还是开始于?是否应该提取 20181116 之后的任何日期?
  • 如果文件扩展名为 .csv 或 .xlsx 且名称确实以 20181116 开头,则仅包含整个文件名
  • 只需遍历列表的每个元素,然后拆分字符串并检查相应元素是否以所需字符串开头,下一个元素是否以 CSV 或 XLSX 结尾
  • 顺便说一句,解析ls 的输出通常被认为是不好的做法,因为它变化很大,但如果您的脚本只在您自己的机器上运行,它是安全的。但是为什么不使用标准 Python 库函数来获取文件名呢?它更简单。
  • 是的,这似乎不是最佳选择。因此我问了以下问题:stackoverflow.com/questions/53560846/…

标签: python python-3.x


【解决方案1】:

以下代码将打印所有必需条目的列表以及仅包含所需文件的名称 的列表。 'data.txt' 是包含要使用的数据的文件。希望这会有所帮助!

fileContent = open('data.txt','r');
readLinesfromContent = fileContent.readlines();

splitLinesforSpace = []
for line in readLinesfromContent:
    splitLinesforSpace.append(line.split())

requiredEntries = []
namesofRequiredFiles = []
for idx, x in enumerate(splitLinesforSpace):
    if len(x) == 10:
        if x[8].startswith('20181116'):
            if x[9].endswith('.CSV') or x[9].endswith('.XLSX'):
                requiredEntries.append(readLinesfromContent[idx])
                x[9] = x[9].split('.')
                #Following gives only names of files
                namesofRequiredFiles.append(x[9][0])

print(requiredEntries)
print(namesofRequiredFiles)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多