如何从只有一列(姓名、电话、地址)的CSV文件中提取数据

2024-06-01 01:04:02 发布

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

我有一个CSV文件。它只是一列。第1行=名称。第2行=电话。第3-5行=地址。你知道吗

我试过用excel组织,但我迷路了。我是一个初学者,希望学习!你知道吗

Chris
778-222-2445
17 Main Street
Clinton, OH
9 Miles

John
772-022-2022
411 Oxford Street
Miami, FL
15 Miles

Chris    778-222-2445    17 Main Street Clinton, OH 9 Miles
John     772-022-2022    411 Oxford Street Miami, FL 15 Miles

等等。。。你知道吗


Tags: 文件csv名称streetmain地址johnchris
3条回答

OFFSET函数在这里很有用。假设您的原始数据位于A列,从A1开始,我们可以对新的name列使用以下公式:

=OFFSET($A$1,(ROW()-1)*6,0)

然后,只需将这个单元格(不管它在哪里)复制到列中,就可以包含原始数据中的所有名称。你知道吗

这个公式的逻辑是它首先获取A1,这是第一个名字。然后,第一个粘贴将访问偏移6行的A1,这将落在第二个名称上,依此类推。你知道吗

您可以对数据中的其他4个字段使用类似的公式。你知道吗

编辑:

根据Ron在下面的评论,您可能希望使用:

=(ROW()-1)*6+COLUMNS($A:A)

只要工作表中的公式/数据发生更改,就不需要重新计算此公式。你知道吗

这段代码将您的文件转换为以空格分隔的行

with open('file.txt') as f:
  record = []
  for line in f:  # iterate through file
    line = line.strip() # remove useless endings
    if line: # data on line?
      record.append(line)
    else:  # empty line => next record
      if record:  # avoid printing if we had several empty lines
        print (' '.join(record))
      record = []  # create new record
  # there could be no empty line at EOF
  if record:  # avoid printing if we had several empty lines
    print (' '.join(record))

如果它是一列,那么它实际上不是一个CSV(即逗号分隔值)文件。您需要提取每一行数据,并根据它在文件中的位置解释它是什么类型的数据。这需要每个集合有5行数据,否则您必须根据找到的数据进行解释。你知道吗

相关问题 更多 >