代码交换。如何将一个CSV文件列的值交换到另一个?

时间:2017-07-07 13:47:23

标签: python csv

我有两个CSV文件。第一个文件(state_abbreviations.csv)只有状态缩写和它们的完整状态名称并排(如下图所示),第二个文件(test.csv)具有状态缩写以及其他信息。

我想将test.csv中的每个州名缩写替换为第一个文件中的相关州名全名。

我的方法是读取目标文件,构建第一个文件的字典(state_abbreviations.csv)。读取第二个文件(test.csv),然后比较缩写是否与第一个文件匹配,如果是,则将其替换为全名。

任何帮助都是适用的

my_url

enter image description here enter image description here

3 个答案:

答案 0 :(得分:1)

好像你试图两次浏览文件?这绝对没有必要:第一次通过时你已经阅读了所有的行,这样你就可以直接创建你的字典项了。

此外,comprehension在创建列表或词典时非常有用。在这种情况下,它可能会有点不那么可读。另一种方法是创建一个空字典,开始一个真正的" for循环并手动添加所有键:值对。 (即:与state_dict[row[abbr]] = row[name]

最后,我在打开文件时使用了with statement,以确保在我们完成文件时安全关闭。这是打开文件时的好习惯。

import csv

with open("state_abbreviations.csv") as state_file:
    state_reader = csv.DictReader(state_file)
    state_dict = {row['state_abbr']: row['state_name'] for row in state_reader}

print(state_dict)

编辑:请注意,与您展示的代码一样,这只会创建将缩写映射到州名称的字典。实际上,在第二个文件中替换它们将是下一步。

答案 1 :(得分:1)

你几乎得到了它,这种方法 - 从缩写中构建一个字典是最简单的方法:

state_map["FL"]

现在,您Florida包含所有州缩写的地图,例如:test.csv包含test.csv

要替换with open("test.csv", "r+U") as f: # open the file in read-write mode # again, you can use csv.DictReader() for convenience, but this is significantly faster reader = csv.reader(f) header = next(reader) # get the header rows = [] # hold our rows if "state" in header: # proceed only if `state` column is found in the header state_index = header.index("state") # find the state column index for row in reader: # read the CSV row by row current_state = row[state_index] # get the abbreviated state value # replace the abbreviation if it exists in our state_map row[state_index] = state_map.get(current_state, current_state) rows.append(row) # append the processed row to our `rows` list # now lets overwrite the file with updated data f.seek(0) # seek to the file begining f.truncate() # truncate the rest of the content writer = csv.writer(f) # create a CSV writer writer.writerow(header) # write back the header writer.writerows(rows) # write our modified rows 中的值,您必须将整个文件加载到内存中,解析它,进行替换并保存,或创建临时文件并将流写入它是更改,然后用临时文件覆盖原始文件。假设current_comments.pictures.create!(file: URI.parse(image_url)) 不是太大而不适合你的记忆,第一种方法更简单:

<p class="contact"> <input id="check" name="check" value="check" style="margin-right: 10px" type="checkbox" tabindex="11">
        <label for="name"> Not Yet Registered</label> </p>


        <p class= "reg"><label for="reg">Register No.</label></p><br>
        <input id = "reg" maxlength="15"  name= "reg" placeholder="Reg No." type ="text" tabindex="12"><br><br>

答案 2 :(得分:1)

第1步:让Python记住缩写的全名,因此我们使用字典

with open('state_abbreviations.csv', 'r') as f:
    csvreader = csv.reader(f)
    next(csvreader)
    abs = {r[0]: r[1] for r in csvreader}

第2步:用全名替换缩写并写入输出,我使用“ test_output.csv

with open('test.csv', 'r') as reading:
    csvreader = csv.reader(reading)
    next(csvreader)
    header = ['name', 'gender', 'birthdate', 'address', 'city', 'state']
    with open( 'test_output.csv', 'w' ) as f:
        writer = csv.writer(f)
        writer.writerow(header)
        for a in csvreader:
            writer.writerow(a[0], a[1], a[2], a[3], a[4], abs[a[5]])