Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python打开csv搜索模式并删除所有其他内容_Python_Python 3.x - Fatal编程技术网

python打开csv搜索模式并删除所有其他内容

python打开csv搜索模式并删除所有其他内容,python,python-3.x,Python,Python 3.x,我得到了一个csv文件“svclist.csv”,其中包含一个单列列表,如下所示: pf=/usr/sap/PL5/SYS/profile/PL5_D00_s4prd1 pf=/usr/sap/PL5/SYS/profile/PL5_ASCS01_s4prdascs 我需要从每一行剥离,除了PL5目录和最后一个目录中的2个数字 应该是这样的 PL5,00 PL5,01 我启动代码如下: clean_data = [] with open('svclist.csv', 'rt') as f:

我得到了一个csv文件“svclist.csv”,其中包含一个单列列表,如下所示:

pf=/usr/sap/PL5/SYS/profile/PL5_D00_s4prd1
pf=/usr/sap/PL5/SYS/profile/PL5_ASCS01_s4prdascs
我需要从每一行剥离,除了PL5目录和最后一个目录中的2个数字 应该是这样的

PL5,00
PL5,01
我启动代码如下:

clean_data = []
with open('svclist.csv', 'rt') as f:
    for line in f:
        if line.__contains__('profile'):
        print(line, end='')
我被困在这里


提前感谢您的帮助。

您可以使用正则表达式(通常,在尝试提取模式时,这可能是一个不错的选择)

重新导入
pattern=r“pf=/usr/sap/PL5/SYS/profile/PL5.*(\d{2})”
将open('svclist.csv','rt')作为f:
对于f中的行:
如果行中有“配置文件”:
最后两个数字=pattern.findall(行)[0]
打印(f'PL5,{last_two_number}')

此代码遍历每一行,检查行中是否有“profile”(这与_contains u相同),然后根据模式提取最后两位数字

您可以使用正则表达式(通常,在尝试提取模式时,这可能是一个不错的选择)

重新导入
pattern=r“pf=/usr/sap/PL5/SYS/profile/PL5.*(\d{2})”
将open('svclist.csv','rt')作为f:
对于f中的行:
如果行中有“配置文件”:
最后两个数字=pattern.findall(行)[0]
打印(f'PL5,{last_two_number}')

这段代码遍历每一行,检查行中是否有“profile”(这与_contains u相同),然后根据模式提取最后两位数字

我假设数字总是在两个下划线之间。您可以在for循环中运行类似的操作

test_str = "pf=/usr/sap/PL5/SYS/profile/PL5_D00_s4prd1"

test_list = test_str.split("_")  # splits the string at the underscores

output = test_list[1].strip(
    "abcdefghijklmnopqrstuvwxyz" + str.swapcase("abcdefghijklmnopqrstuvwxyz"))  # removing any character

try:
    int(output) # testing if the any special characters are left
    print(f"PL5, {output}")
except ValueError:
    print(f'Something went wrong! Output is PL5,{output}')

我假设数字总是在两个下划线之间。您可以在for循环中运行类似的操作

test_str = "pf=/usr/sap/PL5/SYS/profile/PL5_D00_s4prd1"

test_list = test_str.split("_")  # splits the string at the underscores

output = test_list[1].strip(
    "abcdefghijklmnopqrstuvwxyz" + str.swapcase("abcdefghijklmnopqrstuvwxyz"))  # removing any character

try:
    int(output) # testing if the any special characters are left
    print(f"PL5, {output}")
except ValueError:
    print(f'Something went wrong! Output is PL5,{output}')

您可以使用正则表达式-(PL5)[^/].{0,}([0-9]{2,2})

为了便于解释,只需复制正则表达式并将其粘贴到此处-'https://regexr.com'. 这将解释正则表达式是如何工作的,您可以进行所需的更改

import re
test_string_list = ['pf=/usr/sap/PL5/SYS/profile/PL5_D00_s4prd1',
                    'pf=/usr/sap/PL5/SYS/profile/PL5_ASCS01_s4prdascs']

regex = re.compile("(PL5)[^/].{0,}([0-9]{2,2})")
result = [] 
for test_string in test_string_list:
    matchArray = regex.findall(test_string)
    result.append(matchArray[0])
with open('outfile.txt', 'w') as f:
    for row in result:
        f.write(f'{str(row)[1:-1]}\n')
在上面的代码中,我创建了一个空列表来保存元组。然后,我在写文件。我需要删除开头和结尾的()。这可以通过str(row)[1:-1]完成,这将对字符串进行切片。
然后,我使用格式化字符串将内容写入“outfile.csv”

您可以使用正则表达式-(PL5)[^/].{0,}([0-9]{2,2})

为了便于解释,只需复制正则表达式并将其粘贴到此处-'https://regexr.com'. 这将解释正则表达式是如何工作的,您可以进行所需的更改

import re
test_string_list = ['pf=/usr/sap/PL5/SYS/profile/PL5_D00_s4prd1',
                    'pf=/usr/sap/PL5/SYS/profile/PL5_ASCS01_s4prdascs']

regex = re.compile("(PL5)[^/].{0,}([0-9]{2,2})")
result = [] 
for test_string in test_string_list:
    matchArray = regex.findall(test_string)
    result.append(matchArray[0])
with open('outfile.txt', 'w') as f:
    for row in result:
        f.write(f'{str(row)[1:-1]}\n')
在上面的代码中,我创建了一个空列表来保存元组。然后,我在写文件。我需要删除开头和结尾的()。这可以通过str(row)[1:-1]完成,这将对字符串进行切片。
然后,我使用格式化字符串将内容写入“outfile.csv”

非常感谢您的回答。这在大部分问题上对我都有帮助,但显然我没有很好地解释我的困境。PL5也是3个字符的组合变量,可以是任何数字和大写字母。我正试着自己想办法,但如果你能帮我完成,那会很有帮助:)@Barak这很容易做到。您只需要修改正则表达式。我会等到今天让你自己试试。:)。使用我提供的网站进行解释。对于调试正则表达式,请使用-“”。将语言更改为python,在顶部,您将看到复制代码片段的选项,该选项可用于直接复制正则表达式代码。我将为您更新我的ans。只需使用您的正则表达式更改正则表达式即可。:)完成@Barak。如果您在理解代码时遇到任何问题,请告诉我。我将最后一行更改为
f.write(f'{str(row)[2:-2]}\n')
输出为'H4C',96 TST',34 6ER',04 PL5',00 PL5',01`我还需要删除'chars:'),再次感谢您的帮助非常感谢您的回答。这在大部分问题上对我都有帮助,但显然我没有很好地解释我的困境。PL5也是3个字符的组合变量,可以是任何数字和大写字母。我正试着自己想办法,但如果你能帮我完成,那会很有帮助:)@Barak这很容易做到。您只需要修改正则表达式。我会等到今天让你自己试试。:)。使用我提供的网站进行解释。对于调试正则表达式,请使用-“”。将语言更改为python,在顶部,您将看到复制代码片段的选项,该选项可用于直接复制正则表达式代码。我将为您更新我的ans。只需使用您的正则表达式更改正则表达式即可。:)完成@Barak。如果您在理解代码时遇到任何问题,请告诉我。我将最后一行更改为
f.write(f'{str(row)[2:-2]}\n')
输出为'H4C',96 TST',34 6ER',04 PL5',00 PL5',01`我还需要删除'chars:'),再次感谢您的帮助