加载带有管道分隔字段的.txt文件时,如何用撇号(')替换双引号(“)?

2024-09-24 22:22:35 发布

您现在位置:Python中文网/ 问答频道 /正文

问题摘要

  • 我正在尝试使用Pandas加载Python中的.txt文件
  • .txt文件在字段之间使用|分隔符
  • 每个字段在双引号“”之间捕获为字符串:例如“i_am_a_string”
  • 问题是有些字段有用双引号表示的撇号。e、 g.“我”不是有效字符串(应该是“我不是有效字符串”)

示例文件

为了演示我的问题,我创建了一个测试文件,在vi中编辑时如下所示:

"Name"|"Surname"|"Address"|"Notes"^M     
"Angelo"|""|"Kenton Square 5"|"Note 1"^M  
"Angelo"|""|"Kenton’s ^M                 
Sqr5"|"note2"^M                          
"Angelo"|""|"Kenton"s ^M                   
Road"|"Note3"^M

加载数据

要加载此文件,我在Jupyter笔记本中运行以下命令:

test = pd.read_csv('test.txt', sep ='|')

它会像下面的屏幕截图一样加载文件:

enter image description here

问题

我希望在文件中的示例“note2”和“Note3”中解决两个问题:

注2问题

加载文件时,如何删除^M?例如,在Jupyter中加载时,如何从地址列中删除“\r\n”。在地址列中加载的“note2”示例应如下所示:

enter image description here

  • 在使用bash命令或
  • 我应该在使用Python将其加载到Jupyter中后删除这些吗
  • 你能推荐每种情况下的代码吗?你会推荐哪一种(为什么)

注3问题

如何将字符串表达式中的双引号替换为撇号?此处它将其打断为另一行,这是不正确的。应按如下方式在第2行中加载: enter image description here

“Note3”示例是一个复合的示例,因为它的字符串中也有“^M”字符,但我想在这里用撇号替换双引号,这样它就不会将其打断到另一行,从而破坏加载

谢谢你的帮助,非常感谢

安杰洛


Tags: 文件字符串test命令txt示例pandas地址
1条回答
网友
1楼 · 发布于 2024-09-24 22:22:35

如何用撇号替换字符串表达式中的双引号

如果要转换为"'始终在字母(单词字符)之间,则可以按照以下方式使用正则表达式(re)预处理文件

import re
txt = '''"Name"|"Surname"|"Address"|"Notes"
"Angelo"|""|"Kenton Square 5"|"Note 1"
"Angelo"|""|"Kenton’s   
Sqr5"|"note2"                    
"Angelo"|""|"Kenton"s
Road"|"Note3"'''
clean_text = re.sub(r'(?<=\w)"(?=\w)', "'", txt)
print(clean_text)

输出

"Name"|"Surname"|"Address"|"Notes"
"Angelo"|""|"Kenton Square 5"|"Note 1"
"Angelo"|""|"Kenton’s   
Sqr5"|"note2"                    
"Angelo"|""|"Kenton's
Road"|"Note3"

说明:使用零长度断言查找“哪个在单词字符之后,哪个在单词字符之前”

如果文件中有文本,首先将其作为文本文件读取,即

with open("test.txt","r") as f:
    txt = f.read()

然后清洗它

import re
clean_text = re.sub(r'(?<=\w)"(?=\w)', "'", txt)

然后使用io.StringIO将其放入pandas.DataFrame中,如下所示

import io
import pandas as pd
test = pd.read_csv(io.StringIO(clean_text), sep ='|')

相关问题 更多 >