我想在写入.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文件之前,如何删除字符串开头和结尾中不需要的文本
答案 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'