删除以 CRLF 结尾的行中的 CRLF

宾威

我一直在寻找一些 python 代码来计算记录中的分隔符,但找不到任何示例。

我有一个管道分隔的文本文件,带有双引号用于文本限定符,CRLF 定义行的结尾。与往常一样,有些列在文本中包含 CRLF,这会混淆输出格式。

"记录开始"|""|"SomeText"|"更多的内容与 CRLF 然后更多的文本"|"甚至可以包含"CRLF"|""CRLF

目前我在记事本++中打开了该文件,并且正在使用正则表达式手动(?<!")\r\n查找没有前面双引号的CRLF。由于我有几个大文件要修复,我想让 python 转到记录的开头,计算 5 个管道并删除该计数中的任何 CRLF,但只有非常基本的 python 知识。我有一些基本的 python 代码来查找和替换一些字符,但认为它不足以完成所需的操作。

replacement = {'","':'"|"'}
lines = [] with open('C:\OriginalRplPipe.txt') as infile:
for line in infile:
    for src, target in replacement.items():
        line = line.replace(src,target)
    lines.append(line)with open('C:\PipeDel.txt', 'w') as outfile:
for line in lines:
    outfile.write(line)
    print ("Finished")
用户9611000

同时,我设法消除了第一个答案中的缺陷。下面是应该做你想做的新代码。它应该独立于记录字段中 CRLF 的数量和位置。

from pathlib import Path
import re

regex_lin = rb'(".*?"\|".*?"\|".*?"\|".*?"\|".*?"\|".*?"\r\n)' # split file into lines
reo_lin = re.compile(regex_lin, re.DOTALL)
regex_rec = rb'".*?"'                                          # split line into records
reo_rec = re.compile(regex_rec, re.DOTALL)

in_file = Path('input.txt')
out_file = Path('output.txt')

old_content = in_file.read_bytes()                             # read as binary file although it is a text file!

lines = reo_lin.findall(old_content)
new_content = b''
for line in lines:
    old_records = reo_rec.findall(line)
    new_line= b''
    for record in old_records:
        record = record.replace(b'\r', b'')
        record = record.replace(b'\n', b'')
        new_line = new_line + record + b'|'
    new_content = new_content + new_line + b'\r\n'

out_file.write_bytes(new_content)                              # write as binary file although it is a text file!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从串行输入中删除\ r和\ n(CRLF)

maven jgitflow release-start目标将行结尾更改为CRLF

使git存储文本文件的CRLF行以.gitattributes结尾

Bitbucket CRLF问题?

在VC ++ 2005中向WCHAR *添加crlf

如何使用批处理命令从文本文件中删除CRLF和换行

如何处理不同的行尾,例如AWK中以CRLF(\ r \ n)结尾的行和以LF(\ n)或CR(\ r)结尾的行

在VBA中的整个csv中删除CrLf-ADODB.Stream(Excel Macro)

将所有新行分隔符从cr或crlf更改为crlf字节

读取文件后删除CR或LF或CRLF

为什么我的分块请求缺少结尾的CRLF?

chrome(客户端)和热点(服务器)之间的Websocket通信(状态行以CRLF结尾)

如何删除文件中的所有CRLF(不能替换为LF)

网络协议设计中的CRLF与LF与零

Bash CRLF-文档末尾的新行

为什么执行搜索和替换时要删除新行(CRLF)?

如何在Cygwin中为git设置以CRLF模式结尾的系统默认行?

XML文件格式-删除杂散的CRLF

从文件中间删除CRLF

如何从awk $ NF列中删除CRLF

如何从nodepad ++的末尾删除CRLF?

trim() 方法是否也会删除 CRLF 字符?

WebStorm - 如何将 CRLF 行结尾更改为 LF

如何删除只有 CRLF 的行?

Git CRLF 和 LF 行以 windows/linux 结尾

Powershell:如何从文本文件中不符合条件的行中删除 CRLF

使用 Bash 或 Notepad++ 删除文本文件中的 CRLF

如果当前行以空格开头,则删除前面的 CRLF

为什么 Windows 用户要将 LF 结尾转换为 CRLF?