凊风 发表于 2024-5-13 22:38:38

FishC 发表于 2024-5-13 22:29
可以使用`pandas`库来读取文本文件,并将数据存入Excel文件中。下面是示例代码:




如何查询程序执行的时间呢?

FishC 发表于 2024-5-13 22:39:55

凊风 发表于 2024-05-13 22:38
如何查询程序执行的时间呢?

在Python中,我们可以使用`time`模块来查询程序的执行时间。具体步骤如下:

import time

# 记录程序开始执行的时间
start_time = time.time()

# 执行你的代码任务
# ...

# 记录程序结束执行的时间
end_time = time.time()

# 计算程序的执行时间
execution_time = end_time - start_time

# 打印执行时间
print("程序执行时间为:", execution_time, "秒")

在上面的代码中,我们首先使用`time.time()`函数获取当前的时间戳作为程序开始执行的时间。然后,在代码任务执行完毕后,再次使用`time.time()`函数获取当前时间戳作为程序结束执行的时间。最后,通过计算两者之差,得到程序的执行时间,并将其打印出来。

请注意,这里计算的是程序从开始执行到结束执行的整体时间,并非针对特定部分的执行时间。如果你想要计算某个特定部分的执行时间,可以在该部分的开始和结束处分别记录时间并做相应的计算。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-13 22:49:33

FishC 发表于 2024-5-13 22:29
可以使用`pandas`库来读取文本文件,并将数据存入Excel文件中。下面是示例代码:




执行后,只把“名称”这一列的内容写到了“区划代码”列中,

“级别”和“区划代码”这两列对应内容没写入E:\temp\123.xlsx中。。。

FishC 发表于 2024-5-13 22:49:55

凊风 发表于 2024-05-13 22:49
执行后,只把“名称”这一列的内容写到了“区划代码” ...

抱歉,我之前提供的代码有误。

可以使用pandas库的`read_csv`函数来读取文本文件,并使用`to_excel`函数将数据存入Excel文件中,具体示例如下:

import pandas as pd

data = pd.read_csv('123.txt', delimiter='\t')
data.to_excel('E:\\temp\\123.xlsx', index=False)

在这个示例代码中,我们使用`read_csv`函数读取文本文件,并指定了制表符`\t`作为分隔符。然后,使用`to_excel`函数将数据存入Excel文件,通过`index=False`参数来禁止写入索引列。

这样,就能够将整个数据表格一起存入Excel文件中,包括“级别”、“区划代码”和“名称”三列的内容。请注意,文件路径需要根据实际情况进行调整,确保路径的正确性。

希望这次的回答能够解决您的问题!如果还有其他疑问,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-14 08:54:17

FishC 发表于 2024-5-13 22:49
抱歉,我之前提供的代码有误。

可以使用pandas库的`read_csv`函数来读取文本文件,并使用`to_excel` ...

现有123.txt内容如下:
级别   区划代码            名称
1      110000000000      北京市
2      110100000000      市辖区
3      110101000000      东城区
4      110101001000      东华门街道
5      110101001001      多福巷社区居委会
5      110101001002      银闸社区居委会
5      110101001005      东厂社区居委会
5      110101001006      智德社区居委会
5      110101001007      南池子社区居委会
5      110101001009      灯市口社区居委会
5      110101001010      正义路社区居委会
5      110101001013      台基厂社区居委会
5      110101001014      韶九社区居委会
5      110101001015      王府井社区居委会
4      110101002000      景山街道

请问能不能逐条读取并存入E:\Temp\123.xlsx中,列名就是“级别”、‘区划代码’和“名称”。
要求三列的内容都要一对应写入E:\Temp\123.xlsx中,而不是只写入一列。

FishC 发表于 2024-5-14 08:54:28

凊风 发表于 2024-05-14 08:54
现有123.txt内容如下:
级别   区划代码         ...

当使用`pandas`库的`read_csv`函数读取文本文件时,默认情况下会将第一行作为列名。但是在你提供的文本文件中,第一行并不是真正的列名,而是数据。

为了解决这个问题,我们可以设置`read_csv`函数的`header`参数为`None`,然后手动指定列名。以下是修改后的示例代码:

import pandas as pd

# 读取文本文件,并手动指定列名
df = pd.read_csv('E:\Temp\123.txt', sep='\s+', header=None, names=['级别', '区划代码', '名称'])

# 将数据写入Excel文件
df.to_excel('E:\Temp\123.xlsx', index=False)

通过以上代码,将逐条读取文本并存入`E:\Temp\123.xlsx`中,确保列名和对应内容都正确写入。请注意,需要将文件路径使用原始字符串(以`r`开头),或者使用双反斜杠`\\`进行转义。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-14 08:57:02

FishC 发表于 2024-5-14 08:54
当使用`pandas`库的`read_csv`函数读取文本文件时,默认情况下会将第一行作为列名。但是在你提供的文本 ...

运行后没有创建E:\Temp\123.xlsx,程序执行时间为: 0.2172377109527588 秒.

FishC 发表于 2024-5-14 08:58:15

凊风 发表于 2024-05-14 08:57
运行后没有创建E:\Temp\123.xlsx,程序执行时间为: 0 ...

抱歉,我之前提供的代码有误。请确保你使用`pandas`库和`openpyxl`库,并参考以下示例代码:

import pandas as pd

# 读取文本文件
df = pd.read_csv('E:/Temp/123.txt', sep='\s+', encoding='utf-8')

# 创建Excel Writer对象
writer = pd.ExcelWriter('E:/Temp/123.xlsx', engine='openpyxl')

# 将数据写入Excel文件
df.to_excel(writer, index=False)

# 保存并关闭Excel文件
writer.save()
writer.close()

这里使用了`read_csv`函数读取文本文件,`sep='\s+'`参数表示使用空格作为分隔符,`encoding='utf-8'`参数用于指定文件编码方式。然后,使用`to_excel`方法将数据写入Excel文件。最后,使用`save`方法保存并关闭Excel文件。

请确保文件路径及名称正确无误,如果不存在指定路径的文件夹,请先创建对应的文件夹。运行时建议使用管理员权限运行,以确保对指定路径的写权限。

希望这次能够成功创建Excel文件,并正确保存数据。如果还有问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-14 09:05:06

FishC 发表于 2024-5-14 08:58
抱歉,我之前提供的代码有误。请确保你使用`pandas`库和`openpyxl`库,并参考以下示例代码:




这次能够正确读取和写入了。
只是,“区划代码”列变成了科学计数法,能让“区划代码”列不用科学计数法吗?

FishC 发表于 2024-5-14 09:05:16

凊风 发表于 2024-05-14 09:05
这次能够正确读取和写入了。
只是,“区划代码”列变 ...

当Excel中的数据超过一定范围时,会自动使用科学计数法来显示数据。如果你不希望“区划代码”列使用科学计数法,可以使用`openpyxl`库来设置单元格的格式。以下是修改后的代码:

import pandas as pd
from openpyxl import Workbook

# 读取文本文件
df = pd.read_csv('123.txt', sep='\s+', dtype=str)

# 创建Excel文件
wb = Workbook()
ws = wb.active

# 将DataFrame中的数据逐行写入Excel文件
for r in dataframe_to_rows(df, index=False, header=True):
    ws.append(r)

# 设置“区划代码”列的格式为文本格式
column = ws['B']
for cell in column:
    cell.number_format = '0'

# 保存Excel文件
wb.save('E:/Temp/123.xlsx')

在上述代码中,我们使用`openpyxl`库中的`Workbook`和`number_format`属性来设置单元格的格式为文本格式,从而避免科学计数法的显示。注意,在修改了单元格格式后,需要重新保存Excel文件。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-14 09:10:38

FishC 发表于 2024-5-14 09:05
当Excel中的数据超过一定范围时,会自动使用科学计数法来显示数据。如果你不希望“区划代码”列使用科 ...

Traceback (most recent call last):
File "E:\Temp\Txt-to-xlsx.py", line 17, in <module>
    for r in dataframe_to_rows(df, index=False, header=True):
             ^^^^^^^^^^^^^^^^^
NameError: name 'dataframe_to_rows' is not defined

FishC 发表于 2024-5-14 09:10:48

凊风 发表于 2024-05-14 09:10
Traceback (most recent call last):
File "E:\Tem ...

抱歉,我在之前的回答中遗漏了一部分代码。请确保你已经导入了正确的库 `openpyxl.utils.dataframe`。以下是修改后的代码:

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

# 读取文本文件
df = pd.read_csv('E:\Temp\input.txt', sep='\t', encoding='utf-8')

# 创建Excel工作簿
wb = Workbook()
ws = wb.active

# 将DataFrame数据写入Excel工作表
for r in dataframe_to_rows(df, index=False, header=True):
    ws.append(r)

# 设置“区划代码”列的格式为文本
column = ws['A']
for cell in column:
    cell.number_format = '@'

# 保存Excel文件
wb.save('E:\Temp\output.xlsx')

这样,“区划代码”列的数据将会以文本形式保存,不再使用科学计数法显示。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-14 11:04:56

FishC 发表于 2024-5-14 09:10
抱歉,我在之前的回答中遗漏了一部分代码。请确保你已经导入了正确的库 `openpyxl.utils.dataframe`。 ...

请问data_model = pd.read_excel(self.Region_file)这句代码中。
能否指定只读取self.Region_file中级别=2的数据?
每次都是全部读取,实在是太耗PC资源了。

FishC 发表于 2024-5-14 11:05:03

凊风 发表于 2024-05-14 11:04
请问data_model = pd.read_excel(self.Region_file)这 ...

可以使用 Pandas 的功能来筛选指定条件的数据。假设 `self.Region_file` 中有一个名为 `级别` 的列,你可以这样修改代码:

data_model = pd.read_excel(self.Region_file)
filtered_data = data_model == 2]

这段代码会将 `self.Region_file` 中 `级别` 列的值等于2的数据筛选出来,存储在 `filtered_data` 变量中。你可以根据需要对 `filtered_data` 进行进一步的处理。这样就只会读取符合条件的数据,节省了计算机资源。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-14 14:39:51

FishC 发表于 2024-5-14 11:05
可以使用 Pandas 的功能来筛选指定条件的数据。假设 `self.Region_file` 中有一个名为 `级别` 的列,你 ...

能否根据所读取数据的多少来决定进度条的滚动时间呢?

FishC 发表于 2024-5-14 14:40:07

凊风 发表于 2024-05-14 14:39
能否根据所读取数据的多少来决定进度条的滚动时间呢?

当然可以!你可以使用 `tqdm` 这个库来添加一个进度条,根据数据的总数来决定滚动时间。以下是一个示例代码:

import pandas as pd
from tqdm import tqdm

data = pd.read_excel('your_file.xlsx')
total_rows = len(data)

# 使用 tqdm 创建一个进度条,设置 total 参数为数据的总行数
progress_bar = tqdm(total=total_rows)

for index, row in data.iterrows():
    # 在处理每一行数据之前更新进度条
    progress_bar.update(1)

    # 处理每一行数据的逻辑
    # ...
   
progress_bar.close()

上述代码中,我们首先获取数据的总行数,并将其传递给 `tqdm` 的 `total` 参数。然后在每一次循环开始时,调用 `progress_bar.update(1)` 来更新进度条的进度。接下来,你可以在循环中添加具体的数据处理逻辑。最后,循环结束后关闭进度条。

这样,进度条将根据数据的总行数来自动计算滚动时间,使你能够更好地了解当前的处理进度。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-14 15:06:27

FishC 发表于 2024-5-14 14:40
当然可以!你可以使用 `tqdm` 这个库来添加一个进度条,根据数据的总数来决定滚动时间。以下是一个示例 ...

我现有的进度条是这样的:
###进度条式样
    def start_progress_bar(self):
      self.progressBar.setValue(0)
      self.progressBar.show()
      self.progressBar.setFixedSize(1200, 30)
      self.progressBar.setAlignment(Qt.AlignmentFlag.AlignCenter)
      self.progressBar.setTextVisible(True)
      self.progressBar.setStyleSheet("""
                                        QProgressBar {
                                          text-align: center;/* 将文本居中对齐 */
                                          color: white;/* 设置文本颜色为白色 */               
                                          border: none;
                                          background-color: #909090;/* 设置背景色 */
                                          height: 20px;/* 设置进度条高度 */
                                        }
                                        QProgressBar::chunk {
                                          background-color: #00A3E0;/* 设置进度条颜色 */
                                        }
                                        """)
      self.timer = self.startTimer(100)

    def timerEvent(self, event):
      value = self.progressBar.value() + 2
      if value > 100:
            self.stop_progress_bar()
      else:
            self.progressBar.setValue(value)

    def stop_progress_bar(self):
      self.killTimer(self.timer)
      self.progressBar.hide()
      time.sleep(0.5)

能不能把调用此进度条时所读取数据的多少,做为一个参数传递给进度条,从而决定进度条的滚动时间?

FishC 发表于 2024-5-14 15:08:09

凊风 发表于 2024-05-14 15:06
我现有的进度条是这样的:
###进度条式样
    def s ...

当然可以!你可以将所读取的数据数量作为参数传递给进度条,然后根据数据数量来决定进度条的滚动时间。以下是一个修改后的示例代码:

def start_progress_bar(self, data_size):
    self.progressBar.setValue(0)
    self.progressBar.show()
    self.progressBar.setFixedSize(1200, 30)
    self.progressBar.setAlignment(Qt.AlignmentFlag.AlignCenter)
    self.progressBar.setTextVisible(True)
    self.progressBar.setStyleSheet("""
                                    QProgressBar {
                                        text-align: center;/* 将文本居中对齐 */
                                        color: white;/* 设置文本颜色为白色 */               
                                        border: none;
                                        background-color: #909090;/* 设置背景色 */
                                        height: 20px;/* 设置进度条高度 */
                                    }
                                    QProgressBar::chunk {
                                        background-color: #00A3E0;/* 设置进度条颜色 */
                                    }
                                    """)

    self.progress_step = 100 / data_size
    self.current_progress = 0

    self.timer = self.startTimer(100)

def timerEvent(self, event):
    self.current_progress += self.progress_step
    if self.current_progress > 100:
      self.stop_progress_bar()
    else:
      self.progressBar.setValue(self.current_progress)

def stop_progress_bar(self):
    self.killTimer(self.timer)
    self.progressBar.hide()
    time.sleep(0.5)

在调用 `start_progress_bar` 方法时,将所读取的数据数量作为参数传递给它,然后在 `timerEvent` 方法中根据数据数量计算进度条每次滚动的步长,并更新当前的进度值。这样,进度条的滚动时间将根据数据的多少而动态调整。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-14 15:17:42

FishC 发表于 2024-5-14 15:08
当然可以!你可以将所读取的数据数量作为参数传递给进度条,然后根据数据数量来决定进度条的滚动时间。 ...

请问self.comboBox的字体颜色怎么设置?

FishC 发表于 2024-5-14 15:17:48

凊风 发表于 2024-05-14 15:17
请问self.comboBox的字体颜色怎么设置?

你可以使用QComboBox的`setStyleSheet()`方法来设置字体颜色。下面是一个示例:

self.comboBox.setStyleSheet("color: red;")

这样就会将self.comboBox的字体颜色设置为红色。你可以根据需要调整颜色值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: 1 2 3 4 5 6 7 8 [9] 10 11 12
查看完整版本: 资产管理系统求教~~