我正在try 从文件中获取城市、州以及指示地区的数字.然后我需要对另一个具有相同城市和州的文件进行同样的操作,并使用数字指示人口,并以相同格式创建一个人口密度的文件.我不明白我应该如何做这件事

我是py新手,没有太多编码经验,所以这就是我迄今为止所拥有的

这是人口文本文件:

Calico, California         12
Rhyolite, Nevada           3
Goldfield, Arizona         30
St. Elmo, Colorado         6
Terlingua, Texas           100
Virginia City, Montana     10
Nevada City, Montana       12
Bodie, California          45
Cahawba, Alabama           22
Kennecott, Alaska          2
Bannack, Montana           233
South Pass City, Wyoming   43
Centralia, Pennsylvania    6
Thurmond, West Virginia    55
Glenrio, Texas             1
Glenrio, New Mexico        1
Bulowville, Florida        54

这是区域文本文件:

Calico, California         2
Rhyolite, Nevada           3
Goldfield, Arizona         12
St. Elmo, Colorado         4
Terlingua, Texas           10
Virginia City, Montana     15
Nevada City, Montana       6
Bodie, California          100
Cahawba, Alabama           20
Kennecott, Alaska          300
Bannack, Montana           23
South Pass City, Wyoming   3
Centralia, Pennsylvania    6
Thurmond, West Virginia    50
Glenrio, Texas             1
Glenrio, New Mexico        1
Bulowville, Florida        60

我知道我需要做一些事情:

OpenFile = open( Population.txt', 'r')

for EachLine in OpenFile:
    Split = EachLine.strip.split("   ")
    #some sort of append to a list but with the first part of split in one list and the number
    # nested in that  list

OpenFile.close()

推荐答案

如果您知道这两个文本文件将具有相同顺序的完全相同的行:

from pathlib import Path

population_path = Path('population.txt')
area_path = Path('area.txt')
output_path = Path('density.txt')
with open(population_path, 'r') as pop_file, open(area_path, 'r') as area_file, open(output_path, 'w') as output_file:
  for pop_line, area_line in zip(pop_file, area_file):
    city_state_pop, population = pop_line.rsplit(' ', 1)
    city_state_area, area = area_line.rsplit(' ', 1)
    density = int(population) / int(area)
    output_file.write(f"{city_state_pop} {density:.2f}\n")

Output 100:

Calico, California         6.00
Rhyolite, Nevada           1.00
Goldfield, Arizona         2.50
St. Elmo, Colorado         1.50
Terlingua, Texas           10.00
Virginia City, Montana     0.67
Nevada City, Montana       2.00
Bodie, California          0.45
Cahawba, Alabama           1.10
Kennecott, Alaska          0.01
Bannack, Montana           10.13
South Pass City, Wyoming   14.33
Centralia, Pennsylvania    1.00
Thurmond, West Virginia    1.10
Glenrio, Texas             1.00
Glenrio, New Mexico        1.00
Bulowville, Florida        0.90

或者,如果您无法保证两个文本文件中的顺序相同,请考虑将您的任务分解为步骤,并 for each 步骤创建助手函数:

from pathlib import Path


def read_data(filename: Path) -> dict[str, int]:
  """Reads data from a given filename and parses it into a dictionary.
  
  Expected file only has lines with 'City, State' followed by whitespace and a integer.

  Args:
    filename (Path): The path to the file to read.

  Returns:
    A dictionary where keys are 'City, State' and values are integers.
  """
  data = {}
  with open(filename, 'r') as file:
    for line in file:
      line = line.strip()
      if line:
        parts = line.rsplit(' ', 1)
        name = parts[0].strip()
        number = int(parts[1])
        data[name] = number
  return data


def calculate_density(population_data: dict[str, int],
                      area_data: dict[str, int]) -> dict[str, float]:
  """Calculates the population density by dividing the population by the area.

  Args:
    population_data: A dictionary of populations keyed by 'City, State'.
    area_data: A dictionary of areas keyed by 'City, State'.

  Returns:
    A dictionary of population densities keyed by 'City, State'.
  """
  return {
    city_state: population / area_data[city_state]
    for city_state, population in population_data.items()
    if city_state in area_data
  }


def write_data(filename: Path, data: dict[str, float]) -> None:
  """Writes data dict to a file after sorting, with each key-value pair on a new line.

  Args:
    filename: The path to the file where data will be written.
    data: The data to write, where each key-value pair is a line.
  """
  longest_key_length = max(len(key) for key in data)
  format_string = f"{{:<{longest_key_length}}} {{:>10}}\n"
  with open(filename, 'w') as file:
      for key, value in sorted(data.items()):
          # Right-align the value in a 10-character wide field.
          file.write(format_string.format(key, f"{value:.2f}"))

def main() -> None:
  """Entry point of script."""
  write_data(filename=Path('density.txt'),
             data=calculate_density(
                 population_data=read_data(Path('population.txt')),
                 area_data=read_data(Path('area.txt')),
             ))


if __name__ == '__main__':
  main()

Output 100:

Bannack, Montana              10.13
Bodie, California              0.45
Bulowville, Florida            0.90
Cahawba, Alabama               1.10
Calico, California             6.00
Centralia, Pennsylvania        1.00
Glenrio, New Mexico            1.00
Glenrio, Texas                 1.00
Goldfield, Arizona             2.50
Kennecott, Alaska              0.01
Nevada City, Montana           2.00
Rhyolite, Nevada               1.00
South Pass City, Wyoming      14.33
St. Elmo, Colorado             1.50
Terlingua, Texas              10.00
Thurmond, West Virginia        1.10
Virginia City, Montana         0.67

Python相关问答推荐

来自ARIMA结果的模型方程

Pandas 群内滚动总和

如何在不使用字符串的情况下将namedtuple属性传递给方法?

pyramid 内部数组中的连续序列-两极

如何将新的SQL服务器功能映射到SQL Alchemy的ORM

Python中是否有方法从公共域检索搜索结果

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

多处理代码在while循环中不工作

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

删除最后一个pip安装的包

非常奇怪:tzLocal.get_Localzone()基于python3别名的不同输出?

对于一个给定的数字,找出一个整数的最小和最大可能的和

如何从.cgi网站刮一张表到rame?

删除字符串中第一次出现单词后的所有内容

PyQt5,如何使每个对象的 colored颜色 不同?'

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

如何在图中标记平均点?

不允许访问非IPM文件夹

如何并行化/加速并行numba代码?

让函数调用方程