删除直到字符串中的特定字符(Python)

时间:2019-02-18 11:09:58

标签: python

我想在写入.txt

之前从字符串的开头和结尾删除某些内容

我正在从串行端口读取传入的字符串。我想将字符串写到.txt文件中,我可以这样做。我尝试使用rstrip()(也尝试过strip())函数最后删除“ OK”,但是没有运气。

理想情况下,我希望程序是动态的,以便可以将其用于其他文件。这就产生了一个问题,因为字符串开头和结尾的不需要的文本可能会有所不同,因此我无法查找要删除的特定字符/单词。

尽管如此,但字符串开头的所有不需要的文本都将以'+'开头,如下面的示例所示(可以检查第一行是否以'+'开头并删除如果可以的话。这将是理想的选择。)

def write2file():
    print "Listing local files ready for copying:"
    listFiles()
    print 'Enter name of file to copy:'
    name = raw_input()
    pastedFile = [] 
    tempStr = readAll('AT+URDFILE="' + name + '"') #Calls another function who reads the file locally and return it in a string
    tempStr = tempStr.rstrip('OK') #This is where I try to remove the 'OK' I know is going to be in the end of the string
    pastedFile[:0] = tempStr #Putting the string into a list. Workaround for writing 128 bytes at a time. I know it's not pretty, but it works :-)
    print 'Enter path to file directory'
    path =  raw_input()
    myFile = open(join(path, name),"w")
    while len(pastedFile):
        tempcheck  = pastedFile[0:128]
        for val in tempcheck:
            myFile.write(val)
        del pastedFile[0:128]
    myFile.close()

我希望.txt包含本地文件中的所有文本,但最后应删除OK。程序运行时返回:

  

+ URDFILE:“ develop111.txt”,606,“ **(((本地文件的内容))确定

我想删除的“确定”仍在其中。

最终的.txt文件中也不需要文本"+URDFILE: "develop111.txt",606,"

所以总结了问题:

在将其写入.txt文件之前,如何删除字符串开头和结尾中不需要的文本

2 个答案:

答案 0 :(得分:0)

您可以尝试以下方法吗?

C++
BOOL WinUsb_WritePipe(
  WINUSB_INTERFACE_HANDLE InterfaceHandle,
  UCHAR                   PipeID,
  PUCHAR                  Buffer,
  ULONG                   BufferLength,
  PULONG                  LengthTransferred,
  LPOVERLAPPED            Overlapped
);

C#
internal static extern Boolean WinUsb_WritePipe(
    IntPtr InterfaceHandle, 
    Byte PipeId, 
    Byte[] Buffer, 
    UInt64 BufferLength, 
    ref UInt64 LengthTransferred, 
    IntPtr Overlapped);

输出:

tempStr = '+URDFILE: "develop111.txt",606,"** ((content of local file)) OK'
tempStr = tempStr.strip()
if tempStr.startswith('+'):
    tempStr = tempStr[1:]
if tempStr.endswith('OK'):
    tempStr = tempStr[:-2]
print(tempStr)

如果要选择所需的文本,则可以使用URDFILE: "develop111.txt",606,"** ((content of local file)) 。您可以尝试以下方法吗?

regex

输出:

import re
tempStr = 'URDFILE: "develop111.txt",606,"** 01((content of local file)) OK'
tempStr = tempStr.strip()
if tempStr.startswith('+'):
    tempStr = tempStr[1:]
if tempStr.endswith('OK'):
    tempStr = tempStr[:-2]

# print(tempStr)
new_str = ''.join(re.findall(r'01(.+)', tempStr))
new_str = new_str.strip()
print(new_str)

答案 1 :(得分:0)

我假设您的URDFILE始终具有与AT命令相同的返回模式+URDFILE: "filname",filesize,"filedata"\nOK。因此,''.join(tempStr.split(',')[3:])[:-3]

就足够了

工作示例:

>>> s = '+URDFILE: "filname",filesize,"filedata, more data"\nOK' 
>>> ','.join(s.split(',')[2:])[:-3]
'"filedata, more data"' 

或使用引号将其删除:

>>>','.join(s.split(',')[2:])[1:-4]
'filedata, more data'