删除Python中CSV单元格的一部分
我最近偶然发现了一项任务,它使用了一些CSV文件,至少可以说,这些文件组织得非常糟糕,一个单元格中应该包含多个单独的列。我想在Python脚本中使用这些数据,但想知道是否可以删除行的一部分(在某个点之后全部删除),然后将其写入字典删除Python中CSV单元格的一部分,python,csv,Python,Csv,我最近偶然发现了一项任务,它使用了一些CSV文件,至少可以说,这些文件组织得非常糟糕,一个单元格中应该包含多个单独的列。我想在Python脚本中使用这些数据,但想知道是否可以删除行的一部分(在某个点之后全部删除),然后将其写入字典 data = {} with open("./test.txt") as f: for i, line in enumerate(f.read().split("\n")): csv_line = line
data = {}
with open("./test.txt") as f:
for i, line in enumerate(f.read().split("\n")):
csv_line = line[:line.index(".")]
for j,col in enumerate(csv_line.split(",")):
data[(i,j)] = col
虽然我无法显示CSV的确切内容,但它看起来是这样的:
useful. useless useless useless useless
我知道这很可能需要一个正则表达式或一个带有语句的endswith,但我无法对CSV文件执行所有这些操作。此外,CSV上有用后写的句号也应删除,并且不是打字错误。实际答案
好的,然后请注意,您可以像对列表一样对字符串使用索引。例如,“这是一个很长的字符串,但我们只需要前4个字母”[:4]
给出“这”
。如果我们现在重新计算点的索引,我们可以得到你想要的。确切地说,字符串具有索引
方法。因此,总的来说,你会:
stuff = "useful. useless useless useless useless"
stuff = stuff[:stuff.index(".")]
现在这些东西非常有用:)。
如果我们讨论的是一个包含多行的文件,就像这样,您可以对每行执行该操作。在,
处拆分该行,并将所有内容放入字典中
data = {}
with open("./test.txt") as f:
for i, line in enumerate(f.read().split("\n")):
csv_line = line[:line.index(".")]
for j,col in enumerate(csv_line.split(",")):
data[(i,j)] = col
你会怎么做
请注意,大多数人都不想手工操作。处理表格数据是一项常见的任务,为此有一个名为pandas的库。不过,在深入研究pandas
之前,最好先熟悉一下python。我认为一个好的开始是。使用pandas
您的任务将如下所示
import pandas as pd
pd.read_csv("./test.txt", comment=".")
给你所谓的数据帧。实际答案
好的,然后请注意,您可以像对列表一样对字符串使用索引。例如,“这是一个很长的字符串,但我们只需要前4个字母”[:4]
给出“这”
。如果我们现在重新计算点的索引,我们可以得到你想要的。确切地说,字符串具有索引
方法。因此,总的来说,你会:
stuff = "useful. useless useless useless useless"
stuff = stuff[:stuff.index(".")]
现在这些东西非常有用:)。
如果我们讨论的是一个包含多行的文件,就像这样,您可以对每行执行该操作。在,
处拆分该行,并将所有内容放入字典中
data = {}
with open("./test.txt") as f:
for i, line in enumerate(f.read().split("\n")):
csv_line = line[:line.index(".")]
for j,col in enumerate(csv_line.split(",")):
data[(i,j)] = col
你会怎么做
请注意,大多数人都不想手工操作。处理表格数据是一项常见的任务,为此有一个名为pandas的库。不过,在深入研究pandas
之前,最好先熟悉一下python。我认为一个好的开始是。使用pandas
您的任务将如下所示
import pandas as pd
pd.read_csv("./test.txt", comment=".")
提供所谓的数据帧。如果知道要拆分的字符,可以使用以下简单方法:
good_data = bad_data.split(".")[0]
good_data = good_data.strip() # remove excess whitespace at start and end
这种方法总是有效的split
将返回一个元组,该元组始终至少有一个条目(完整字符串)。使用索引
可能引发异常
您还可以使用split(“.”,N)
限制必要时发生的拆分次数
如果知道要拆分的角色,可以使用以下简单方法:
good_data = bad_data.split(".")[0]
good_data = good_data.strip() # remove excess whitespace at start and end
这种方法总是有效的split
将返回一个元组,该元组始终至少有一个条目(完整字符串)。使用索引
可能引发异常
您还可以使用split(“.”,N)
限制必要时发生的拆分次数
你如何区分什么是有用的/无用的有点不清楚。您希望删除出现一个字符(即“.”后的所有内容,还是删除固定数量字符/单词后的所有内容?@user2640045我希望删除“.”字符后的所有内容。很抱歉没有澄清。你到底想在词典中怎样保存这些信息?你如何区分哪些有用/无用有点不清楚。您希望删除出现一个字符(即“.”后的所有内容,还是删除固定数量字符/单词后的所有内容?@user2640045我希望删除“.”字符后的所有内容。对不起,没有澄清。你到底想把它放在字典里吗