当前位置: 首页 > 知识库问答 >
问题:

如何在python中将字符添加到行首和行尾

阎懿轩
2023-03-14

我有一个从 IT 团队获得的数据集。他们有一个他们不愿意改变的自动提取。

文件如下所示(根据要求添加更多行)

1#|#2#|#3#|#4

数据1#|#数据2#|#data3#|#data4

数据1#|#数据2#|#data3#|#data4

cdata1#|#da#ta2#|#data3#|#数据4

(第 4 行,这是我的数据中的 # 搞砸了仅 # 的引号字符的示例)

#看起来像是试图成为引号字符。我想这样使用它们,但无论出于什么原因,它们都不包括在每行的开头或结尾。这些文件有不同的列数,所以我试图处理它们,基本上在每行的开始和结束处添加一个#。

此外,由于#经常在我的数据中找到,我想将#转换为###以使导入到我的工具更干净。

所以我想

###第一列###|## #第二列### | # # #第三列# # # | # #第四列# # | # # #第四列# # #

我怎么能做到这一点?

csv_pointer = open(file, encoding=CSV_Encoding, errors=Error_Detection)
csv_reader = csv.reader(
    csv_pointer,
    delimiter=CSV_Seperator,
    quoting=csv.QUOTE_NONE

)
batch = list()
# for each row in csv reader
for row in csv_reader:
    # append the processed row to the batch list
    # processed row meaning we strip down the fields to remove redundant 
data
    # and add Nones if the length of the row is not up to the FIELDS_COUNT
    batch.append([k.strip() for k in row] + [None] * (FIELDS_COUNT - len(row)))
# check if the batch length is greater than ROWS_AT_ONCE
if len(batch) >= ROWS_AT_ONCE:
    # if it is use the executemany over the cursor to insert the data in the batch list to the database
    curr.executemany(insert_func(Table_Name), batch)
    # commit
    conn.commit()
    # set the batch to empty list again
    batch = list()
# if the batch list is not empty
if batch:
# if it is use the executemany over the cursor to insert the data in the batch list to the database
curr.executemany(insert_func(Table_Name), batch)
# commit
conn.commit()
# delete batch (just incase the program message up and it need to delete the batch)
del batch

我试图将分隔符更改为#|#,这似乎可以解决我的问题,但它返回了错误:TypeError:“分隔符”必须是1个字符的字符串

共有2个答案

拓拔欣嘉
2023-03-14

这样的东西对你有用吗?

#Initial text
text="col1#|#col2#|#col3#|#col4"
#adds a ### to start and end
text='###{}###'.format(text)
#Replaces #|# with ###|### 
text=text.replace("#|#","###|###")

这将返回

###col1###|###col2###|###col3###|###col4###

显然,这需要在某种循环中遍历您拥有的所有数据,也可以合并成一行,但我将其拆分以尝试使其更清晰。

郏景澄
2023-03-14

如果可以的话,为什么不使用您IT团队的csv格式的定界策略呢?您可以在解析工具中对“#|#”进行拆分(如果是在python中):

text="col1#|#col2#|#col3#|#col4"
values = text.split("#|#")
# values is ['col1', 'col2', 'col3', 'col4']

使用 csv 模块,您必须指定报价参数。特别是在第 2 行:

csv_reader = csv.reader(
    csv_pointer,
    delimiter=CSV_Seperator,
    quoting='#'
)

如果这会干扰字段中的'#',那么您可能需要采用文字方法来解决这个问题(没有csv库):

batch = []
with open(file, r) as f:
     for l in f.readlines()[1:]: # if there's a header, if not, then remove the [1:]
         batch.append(l.split("#|#"))
 类似资料:
  • 我在互联网上看到了向TableView添加行的示例,例如使用Oracle留档中的Person类。 但我的列数是可变的,所以我不能绑定到Person(或任何其他)bean业务对象。 Oracle示例继续展示了如何将列绑定到属性名,但对于这一点,它只展示了如何添加列,而不是行。 我的问题是,有人能给我指出一个Hello, World动态添加任意列和/或行到JavaFX 8 TableView的例子吗?

  • 我有一个带有ACF中继器字段的分类。我正在尝试在自定义REST APIendpoint的回调中添加行,但没有运气。该字段的方案是: 我使用以下命令向字段中添加一行-但运气不佳: 知道我做错了什么吗?添加行是否只适用于Post而不适用于Term....?我怀疑那是真的...

  • 这是我使用Thymeleaf模板的代码 正在生成: 我希望每个复选框都在一行中。在普通的纯HTML中,我会使用<代码>

  • 问题内容: 使用Python v2,我在程序中运行一个值,该值末尾将一个数字四舍五入到小数点后两位: 像这样: 有没有办法在小数点后每三位插入一个逗号值? 即:10000.00变成10,000.00或1000000.00变成1,000,000.00 谢谢你的帮助。 问题答案: 在Python 2.7和3.x中,可以使用格式语法 这是在记录PEP 378 -格式说明千位分隔符 并且在一个例子官方文档

  • 我正在生成一个包含一些注释、单元格和表格的PDF文件。。。我在JAVA中使用PDFbox 我想在我的字符串中添加一个换行符,它被称为“esc注释”,它包含一个注释数组。 我试过"\n","\r","System.get属性("line.separator")"都没用。 这是我的代码: 我想为每个来自getCloseComment()的评论添加一个换行符

  • 本文向大家介绍将尾随零添加到Python字符串,包括了将尾随零添加到Python字符串的使用技巧和注意事项,需要的朋友参考一下 作为数据处理活动的一部分,有时我们需要在一个字符串后附加另一个字符串。在本文中,我们将看到如何将动态零数字附加到给定的字符串。可以通过使用以下程序中所示的各种字符串函数来完成此操作。 使用ljust和len Python字符串方法返回以长度为宽度的字符串左对齐的字符串。使